18.Understanding self(self变量):
#import "MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h" @implementation MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone -(void)speak; { NSLog(@"%@ says Hello There!", self);//用self变量,输出的是类对象在内存中的地址 } @end
19.Logging a property instead of self(用一个属性代替self变量):
#import "MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h" @implementation MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone -(void)speak; { NSLog(@"%@ says Hello There!", self.phoneName);//self代表了类本身对象,通过“.”来获得类本身的属性值。 } @end
20.Method that returns a result://有返回类型的方法
MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h
@interface MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone : NSObject @property NSString *phoneName; @property NSString *modelNumber; - (NSString *) speak;//定义一个返回类型为String类型的方法 @end
MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.m
#import "MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h" @implementation MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone -(NSString *)speak; { NSString *message = [NSString stringWithFormat:@"%@ says Hello There!", self.phoneName]; return message;//利用关键字return返回String变量 } @end
21.与类对象关联,实现有返回类型的方法:
Challenge
#import "MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h" MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone *talkingiPhone = [[MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone alloc] init]; talkingiPhone.phoneName = @"Mr. Higgie"; NSString *phoneMessage = [talkingiPhone speak];//调用MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone 类中speak方法
NSLog(@"%@", phoneMessage);
22.Declaring a method with arguments:
MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h
@interface MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone : NSObject @property NSString *phoneName; @property NSString *modelNumber; - (NSString *) speak:(NSString *)greeting;//带有一个NSString *类型的参数greeting @end
MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.m
#import "MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h" @implementation MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone - (NSString *)speak:(NSString *)greeting; { NSString *message = [NSString stringWithFormat:@"%@ says %@", self.phoneName, greeting]; return message; } @end
Challenge
#import "MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h" MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone *talkingiPhone = [[MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone alloc] init]; talkingiPhone.phoneName = @"Mr. Higgie"; NSLog(@"The result is %@:",[talkingiPhone speak:@"tony"]);//调用带有参数greeting的speak方法,并输出 NSLog(@"The result is %@:",[talkingiPhone speak:@"jack"]); NSLog(@"The result is %@:",[talkingiPhone speak:@"demon"]);
23.Property VS Arguments:
可以利用self.propertyName来代替参数argument。
24.battery -1(属性值操作)
MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h
@interface MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone : NSObject @property NSString *phoneName; @property NSString *modelNumber; @property NSNumber *batteryLife; - (void) decreaseBatteryLife;//声明了一个减少电池电量的方法 - (void) reportBatteryLife; - (NSString *) speak:(NSString *)greeting; @end
MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.m
#import "MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h" @implementation MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone - (void) decreaseBatteryLife;//实现上述方法 { self.batteryLife = @([self.batteryLife intValue] - 1);//自身属性值减一,为NSNumber *类型 } - (void) reportBatteryLife; { NSLog(@"Battery life is %@", self.batteryLife); } - (NSString *)speak:(NSString *)greeting; { NSString *message = [NSString stringWithFormat:@"%@ says %@", self.phoneName, greeting]; return message; } @end
Example Use
#import "MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h" MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone *talkingiPhone = [[MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone alloc] init]; talkingiPhone.phoneName = @"Mr. Higgie"; talkingiPhone.batteryLife = @100; [talkingiPhone decreaseBatteryLife];//调用方法 [talkingiPhone reportBatteryLife];
25.NSNumber as a argument:
MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h
@interface MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone : NSObject @property NSString *phoneName; @property NSString *modelNumber; @property NSNumber *batteryLife; - (void) decreaseBatteryLife:(NSNumber *)count;//声明一个以NSNumber为参数的方法 - (NSString *) speak:(NSString *)greeting; - (void) reportBatteryLife; @end
MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.m
#import "MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h" @implementation MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone - (void) decreaseBatteryLife:(NSNumber *)count;//实现方法 { self.batteryLife = @([self.batteryLife intValue] - [count initValue]);//操作NSNumber *类型数据时,直接操作会报错,应先转换成NSUInteger //类型数据//,NSNumber *类型数据转化成NSUInteger类型数据,采用unsignedIntegerValue即可。
}
- (void) reportBatteryLife;
{
NSLog(@"Battery life is %@", self.batteryLife);
}
- (NSString *)speak:(NSString *)greeting;
{ NSString *message = [NSString stringWithFormat:@"%@ says %@", self.phoneName, greeting];
return message;
}
@end
26.Making a property read-only(创建一个只读的属性):
MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h
@interface MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone : NSObject @property NSString *phoneName; @property NSString *modelNumber; @property (readonly) NSNumber *batteryLife;//加上关键字readonly即指定batteryLife为只读的,外部类不能修改它的值 - (void) decreaseBatteryLife:(NSNumber *)arg; - (NSString *) speak:(NSString *)greeting; - (void) reportBatteryLife; @end
MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.m
#import "MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h" @implementation MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone - (void) decreaseBatteryLife:(NSNumber *)arg; { //self.batteryLife = @([self.batteryLife intValue] - [arg intValue]);//因为batteryLife属性已设置为只读,所以self.batteryLife相当于外部访问,因此不 //能修改 _batteryLife = @([self.batteryLife intValue] - [arg intValue]);//如果想要被外部修改,需利用内部变量,在属性前加“_”,来证明他为内部变量,才能修改。 } - (void) reportBatteryLife; { NSLog(@"Battery life is %@", self.batteryLife); } - (NSString *)speak:(NSString *)greeting; { NSString *message = [NSString stringWithFormat:@"%@ says %@", self.phoneName, greeting]; return message; } @end
27.Assinging a default property(默认初始化操作):
MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.m
#import "MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone.h" @implementation MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone - (MrHiggieIsAnAmazingPhoneAndIsLovedByEveryone *)init;//调用系统init方法 { _batteryLife = @100;//为属性添加默认的值 return [super init]; } - (void) decreaseBatteryLife:(NSNumber *)arg; { _batteryLife = @([self.batteryLife intValue] - [arg intValue]); } - (void) reportBatteryLife; { NSLog(@"Battery life is %@", self.batteryLife); } - (NSString *)speak:(NSString *)greeting; { NSString *message = [NSString stringWithFormat:@"%@ says %@", self.phoneName, greeting]; return message; } @end
28.Create a instance variable(创建一个实例变量):
Coffee.h
@interface Coffee : NSObject @property NSNumber *temperature; @end
创建实例:
@interface Coffee : NSObject {//以大括号来实例化一个变量 NSNumber *_temperature;//以下划线开头来代替property(属性)temperature
} @end
Coffee.m
#import "Coffee.h" @implementation Coffee - (void)pour; { if([_temperature intValue] < 155){//[_temperature intValue]来引用实例_temperature
NSLog(@"Oh no! The coffee is cold!");
}
{
NSLog(@"Mmmm, delicious warm coffee");
}
} @end