1.@property
只用在.h文件中@interface关键字中
当编译器遇见@property时,会自动展开成getter和setter方法的声明。
//等效
@property int age;
-(int)age;
-(void)setAge:(int)newAge;
注意:在XCode4.5环境下,检测到@property时,自动在.m文件中添加@synthesize age = _age。如.h文件,没有声明_age变量,则自动在.m文件中添加私有的成员变量_age。
2.@synthesize
只用在.m文件中的@implements关键字。
当编译器遇见@synthesize时,会自动展开成getter和setter方法的实现,默认访问同名的成员变量。
@synthesize age = _age;代表get方法和set方法会访问_age这个成员变量。
//等效
@synthesize age = _age;
-(void)setAge:(int)newAge
{
_age = newAge;
}
-(int)age
{
return _age;
}
注意:如果没有找到成员变量,则自动生成私有的同名的成员变量。
3.完整的使用
Person.h文件
@interface Person:NSObject
{
int _ID;
float _weight;
}
@property int ID;
@property float weight;
@end
Person.m文件
@implement Person
@synthesize ID = _ID;
@synthesize weight = _weight;
@end
4.综合使用
以上@property和@synthesize关键字和getter/setter方法可以混合使用。
如果在某种特殊的需求下,手动实现了getter/setter方法时,则@synthesize无效。
Person.h文件
@interface Person:NSObject
{
int _ID;
float _weight;
}
@property int ID;
@property float weight;
@end
Person.m文件
@implement Person
-(void)setID:int newID
{
//在getter/setter方法中,有特殊的操作
_ID = newID *100;
}
-(int)ID
{
return _ID;
}
@end