OC之@property和@synthesize

在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;

};

- intage

{

  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控件

相關文章
相關標籤/搜索