1.property关键字:
》property 是一个编译器特性。
(1)在:xcode4.4版本以前
》用法:@property 指定成员变量类型 指定去掉下划线的成员变量名 ;
》用于在类声明中自动生成指定的 成员变量 set / get 方法(赋值 / 取值)的声明。
@interface Iphone : NSObject
{
int _cpu ;
}
//自动生成 - (void)setCpu:(int)cpu ; 和 - (int)cpu ; 两个方法的声明
@property int cpu;
@end
(2)xcode4.4版本以后property做了增强:
》帮助声明与实现:上述声明的同时,也会自动实现指定的 成员变量 set / get 方法(赋值 / 取值)。
》如果没有手动声明 成员变量,property 会在 .m 文件中自动帮助我们生成一个以"_"开头的成员变量(成员变量: _变量名 )。例如:@property int xxxx ; 则在 .m 文件中自动生成的成员变量:_xxxx。
》注意点:#如果想让子类继承父类的成员变量,还是必须在声明中手动定义成员变量。#如果你自己同时实现了一个成员变量的set / get 方法时,那么编译器不会在 .m 文件中自动成该成员变量,必须自己定义该成员变量。
2.synthesize关键字(实现):
》编译器特性。
(1) 明确告诉synthesize 后面的 变量 要赋值给 指定的成员变量:
》用法:@synthesize 变量名 = 成员变量 ;
》用于在类的实现中自动生成给 指定的 成员变量 set / get 方法(赋值 / 取值)的实现。
@implementation Iphone
/*
会实现:
- (void) setCpu:(int)cpu // - (void)set变量名大写:(int)变量名
{
_cpu = cpu ;
}
- (int) cpu // - (int)变量名
{
return _cpu ;
}
*/
@synthesize cpu = _cpu ;
@end
(2) 没有明确告诉synthesize 后面的 变量 要赋值给 指定的成员变量:
》用法:@synthesize 变量名 ;
》说明:这样会自动赋值给和 变量 同名的成员变量。等价:@synthesize 变量名 = 变量名;
》如果该类中有一个成员变量cpu,那么当这样写时:
@implementation Iphone
/*
会实现:
- (void) setCpu:(int)cpu
{
self->cpu = cpu ;
}
- (int) cpu
{
return self->cpu ;
}
*/
@synthesize cpu ;
@end
3.重写set / get 方法:
》当想控制外界传入的一些数据的合理性安全性的时候,我们就需要手动实现set 方法。
》再次强调:当我们手动同时实了一个成员变量的set / get 方法的时候,property 就不会自动给我们生成成员变量。