蓝少泽

天生我材必有用,千金散去还复来。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

 

posted on 2013-05-15 14:40  蓝少泽  阅读(256)  评论(0编辑  收藏  举报