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