在OC中常常使用get和set方法,可是當成員變量太多的時候,就要敲不少行get和set方法。在xcode4.4以前,爲了簡潔代碼,可使用@property聲明get和set方法:xcode
@property int age;多線程
就至關於:性能
- (void)setAge:(int)age;atom
-(int)age;spa
後面代碼能夠就看成正常寫了get和set方法同樣去調用- (void)setAge:intage;和-(int)age;。線程
假設_age爲成員變量,固然也可使用@synthesize去代替寫出get和set方法的實現:code
@synthesize age = _age;對象
就至關於:內存
-(void)setAge : (int)ageget
{
_age = age;
};
- (int)age
{
retrun _age;
}
【備註】也能夠同時聲明與實現多個get和set方法,格式爲:
@property int age1,age2,age3;
@synthesize age1 = _age1,age2 =_age2;
當上述代碼中的成員變量_age1和_age2不存在時,系統可自動生成@private類型的_age1和_age2成員變量,代碼仍可正常運行。
對於實現時只寫@synthesize age,但類中同時存在成員變量age和_age,則默認狀況下會訪問與age名字同樣的成員變量,即訪問age而不是_age。
在xcode4.4以後,@property的功能更增強大,它同時具備了@synthesize的功能,好比@property int age;具備以下三個功能:
(1) 生成_age成員變量的get和set方法的聲明
(2) 生成_age成員變量的get和set方法的實現
(3) 生成一個名爲_age的成員變量
@property的參數:
(1) set方法內存管理相關的參數
(a) retain:release舊值,retain新值(適用於OC對象類型)
(b) assign:直接賦值(默認,適用於非OC對象類型),經常使用在BOOL、int等基本數據類型。
(c) copy:release舊值,copy新值,經常使用在NSString對象
(2) 是否要生成set方法
(a) readwriter:同時生成set和get方法的聲明和實現
(b) readonly:只生成get的聲明和實現
(3) 多線程管理
(a) nonatomic:性能高(通常都是使用這個)
(b) atomic:性能低(默認)
(4) set和get方法的名稱
(a) setter:決定了set方法的名稱,必定要加個冒號「:「
(b) getter:決定了get方法的名稱,不要加冒號
(5) strong和weak
(a) strong:用於通常對象
(b) weak:用於UI控件