Upload
dortha-pearson
View
216
Download
0
Embed Size (px)
Citation preview
CS 3800 Su 11Beg. IOS Dev
L4 Obj C part 1
CS 3800 Introduction to IOS
programmingSummer 2011
G. Zimmerman
CS 3800 Su 11Beg. IOS Dev
Announcements
• Survey says…..
• 016 passwords
• 016 Keys:
• Server?
• Today’s ‘Final’ code will be posted after class
L4 Obj C part 1
CS 3800 Su 11Beg. IOS Dev
Objective-C
Goal: cover enough fundamentals to form a backdrop for understanding iOS programming.
If you continue with iOS, you will want to delve further.
L4 Obj C part 1
CS 3800 Su 11Beg. IOS Dev
Objective-C
• alloc init• ivars and functions• Multiple parameters• Property,
Synthesize
L4 Obj C part 1
• Memory management
• Protocols• Categories• Inheritance
CS 3800 Su 11Beg. IOS Dev
Objective-C Classes
• NSObject
• NSArray
• NSString
• NSSet
• NSDictionary
• NSDate
• Mutable & ImmutableL4 Obj C part 1
CS 3800 Su 11Beg. IOS Dev
l4 Obj-C part I
Monday: A Fraction Class
References:
• Objective C Beginner's guide
• RH CSSE 493 Podcast #8
• http://0-proquest.safaribooksonline.com.maurice.bgsu.edu/book/programming/objective-c/9780321605559
CS 3800 Su 11Beg. IOS Dev
l4 Obj-C part I
Format specifiers
• Google “C format specifiers”
• Like iomanip
• Appl: creating strings & general output
• Create a “format template”
• XX.XX 5 total spaces, 2 decimals– %5.2f
Aside
CS 3800 Su 11Beg. IOS Dev
l4 Obj-C part I
Format Example
float x = 14.9345;
int age = 145;
char* cname = "old style c string";
NSLog(@" print spec examples: 7.6f %7.6f ", x);
NSLog(@" print spec examples: 5.2f %5.2f ", x);
NSLog(@" print spec examples: 4.2f %4.2f ", x);
NSLog(@" print spec examples: 3.2f %3.2f ", x);
NSLog(@" name: %s, age:%4d", cname, age);
CS 3800 Su 11Beg. IOS Dev
l4 Obj-C part I
Specifier Sampler
Integer %I or %d
Float %f %lf
Char %c
C-string %s
NSString @
CS 3800 Su 11Beg. IOS Dev
C++ Fraction Class (partial)
Recall from C++:
class Fraction {
public:
Fraction();
Fraction( int, int);
Fraction(int);
private:
int num, den;
void normalize();
}
L4 Obj C part 1
CS 3800 Su 11Beg. IOS Dev
Designated initializer
-(id) initFractionWithNumerator:(NSInteger) aNumerator
denominator:(NSInteger) aDenominator {
self = [super init];
if ( self != nil) {
NSLog(@" %@ ", __FUNCTION__);
numerator = aNumerator;
denominator = aDenominator;
}
return self;
}
L4 Obj C part 1
CS 3800 Su 11Beg. IOS Dev
description
#pragma mark –
#pragma mark NSObject overrides
(NSString *) description {
if ( denominator ==1 )
return [NSString stringWithFormat:@"%d", numerator];
//else
return FILL IN THE BLANK ;
}
L4 Obj C part 1
CS 3800 Su 11Beg. IOS Dev
Make some fractions
• #import
• [ [ classname alloc ] init]
• Retain count
L4 Obj C part 1
CS 3800 Su 11Beg. IOS Dev
Standard representation- (void) normalize {
if ( denominator <0) {
numerator = -numerator;
denominator = -denominator;
}
int a = abs(numerator);
int b= abs(denominator);
int t;
while (b != 0) {
t = b;
b = a % b;
a = t;} // a is the gcd
numerator = numerator / a;
denominator = denominator / a;
}
L4 Obj C part 1
CS 3800 Su 11Beg. IOS Dev
Revised initializer-(id) initFractionWithNumerator:(NSInteger)aNum
denominator:(NSInteger)aDen {
if ( aDen == 0) return nil;
self = [super init];
if ( self != nil ) {
numerator = aNum;
denominator = aDen;
}
[self normalize];return self;
}
L4 Obj C part 1
CS 3800 Su 11Beg. IOS Dev
Alternate initializers
• Convenience for clients• Reuse designated intializer• Whole number
• initWithWholeNumber:
• Default initializer: Init – For Default behavior
L4 Obj C part 1
CS 3800 Su 11Beg. IOS Dev
CLASS convenience methodsFraction *fx = [FRACTION zero];
Standard is to return an autoreleased object
+(id) zero;
+(id) one;
+(id) negativeOne;
+(id) fractionWithNumerator:(NSInteger)num denominator:(NSInteger)two;
L4 Obj C part 1
CS 3800 Su 11Beg. IOS Dev
Retain Counts (intro)Onbject: many owners.
i.e. Many pointers to the one object.
Fraction *x = [Fraction one];
Fraction *y = x; [y retain];
Fraction *z = y; [z retain];
L4 Obj C part 1
numerator: 1 denominator: 1x
y
z
CS 3800 Su 11Beg. IOS Dev
Memory management Cardinal Rules
L4 Obj C part 1
Only release or autorelease objects you own.
You own it if: it was created with a method whose name begins:
alloc new copy ( a few more)you send it a retain message.
CS 3800 Su 11Beg. IOS Dev
C++ getters/setters
class Fraction {
public:
void setNumerator( int );
int getNumerator();
private:
int num, den;
void normalize();
}
Fraction x;
x.setNumerator(2);
cout << “ The num is” << x.getNumerator();
L4 Obj C part 1
CS 3800 Su 11Beg. IOS Dev
Objective C getters/setters
Getters:
(NSInteger) numerator {
return numerator;
}
Setter:
-(void) setNumerator { // spelling important
?
}
L4 Obj C part 1
CS 3800 Su 11Beg. IOS Dev
Dot Notation 1
Fraction * f1 = …..
NSInteger top = [f1 numerator]; //getter
OR
NSInteger top = f1.numerator; // calls the getter
f1.numerator IS [f1 numerator];
THIS IS NOT YOUR FATHER’S dot Notation!
L4 Obj C part 1
CS 3800 Su 11Beg. IOS Dev
Dot Notation 2
Fraction * f1 = …..
= [f1 setNumerator:14]; //setter
OR
f1.numerator = 14; // calls the setter
Where did the Set go?
L4 Obj C part 1