// Objective-C program with classes that illustrates the use of some NSFoundation objects and methods such as NSNumber, NString, NSLog, etc. #import /////////////////////////////////////////// Player class interface @interface Player: NSObject { // member variables, in Objective-C and this iPhone course, don't use the prefix 'my' int health; NSNumber* ammo; NSString* name; } // constructors -(Player*) initWithHealth: (int) h andAmmo: (NSNumber*) newAmmo; // purposefully using one int parameter & one NSNumber just to show that both can // be used however NSNumber is probably better style for iOS development // accessors // in Objective-C, the style is to name accessors with the name of the member variable // (i.e. don't use the 'get' prefix) -(int) health; -(NSNumber*) ammo; // modifiers -(void) setHealth: (int) newHealth; -(void) setName: (NSString*) newName; -(void) print; @end // end of Player interface //////////////////////////////////////////// Player class implementation @implementation Player -(Player*) initWithHealth:(int) newHealth andAmmo:(NSNumber*) newAmmo { self = [super init]; // calling default constructor of parent class, this may be default if (self) { [self setHealth: newHealth]; // or health = newHealth; but probably better style and safer to // use the modifier method since it is available ammo = newAmmo; name = @""; } return self; } -(int) health { return health; } -(NSNumber*) ammo { return ammo; } -(void) setHealth:(int) newHealth { health = newHealth;; } -(void) setName:(NSString *) newName { name = newName; } -(void) print // similar to toString method in our former Java course { NSLog(@"\n\nhealth = %i, ammo = %@, name = %@", health, ammo, name); } @end /////////////////////////////////////////// Enemy class interface @interface Enemy: NSObject { NSNumber* strength; NSString* name; } @property(readwrite, retain) NSNumber* strength; // allows properties to be synthesized @property(readwrite, retain) NSString* name; -(void) print; @end // end of Enemy interface //////////////////////////////////////////// Enemy class implementation @implementation Enemy @synthesize strength, name; // creates default modifier and accessor methods -(void) setStrength: (NSNumber*) newStrength andName: (NSString*) newName { [self setStrength:newStrength]; [self setName:newName]; } -(void) print { NSLog(@"Enemy -- strength = %@, name = %@", strength, name); } @end // end of Enemy implementation /////////////////////////////////////////// int main(int argc, const char * argv[]) { @autoreleasepool // do we need to perform this memory management in current iOS version? { Player *player1 = [[Player alloc] init]; [player1 setHealth: 5]; [player1 print]; NSLog(@"\n\n\n"); Player *player2 = [[Player alloc] initWithHealth:100 andAmmo:@10]; [player2 setName: @"achilles"]; [player2 print]; NSLog(@"player 2 health = %i", [player2 health]); NSLog(@"\n\n\n"); Enemy *enemy1 = [[Enemy alloc] init]; [enemy1 setStrength: @20]; [enemy1 setName: @"Hercules"]; [enemy1 print]; } return 0; }