05setter與getter方法

setter/getter方法 與 @proterty
(一)點語法的本質(zhì)
點語法的本質(zhì)是方法的調(diào)用,當(dāng)使用點語法時,編譯器會自動將其轉(zhuǎn)化為setter/getter方法,如果沒有setter和getter方法,就不能使用點語法.

(二)點語法使用時的注意事項
以下這種方式是一個死循環(huán):
(1)在setter方法中,self.weight = weight; 相當(dāng)于[self setWeight:weight];
(2)在getter方法中,return self.weight ; 相當(dāng)于[self weight];

(三)@property 與 @synthesize關(guān)鍵字的作用
(1)@property 關(guān)鍵字
@property 關(guān)鍵字 可以自動生成某個實例變量(成員變量)的setter和getter方法的聲明.
例:

@property  float  weight;

編譯時遇到這行代碼,會自動擴(kuò)展為以下兩句:

 -(void)setWeight:(float)weight;
 -(float)weight;

(2)@synthesize 關(guān)鍵字
@synthesize 關(guān)鍵字 可以自動生成某個實例變量(成員變量)的setter和getter方法的實現(xiàn).
例:

@synthesize  weight = _weight;
 //左邊的weight    代表實現(xiàn)@property  float  weight
 //右邊的_weight   代表_weight這個實例變量 

編譯時遇到這行代碼,會自動擴(kuò)展為以下代碼:

 - (void)setWeight:(float)weight
 {
   _weight = weight; 
 }

 - (float)weight
 { 
   return   _weight;
 }

(四)關(guān)鍵字使用時的注意事項
(1)從Xcode4.4之后,@property關(guān)鍵字獨攬了三個功能,這三個功能分別是:
1)生成_weight實例變量的get和set方法的聲明;2)生成_weight實例變量set和get方法的實現(xiàn);3)生成一個_weight的實例變量。
相當(dāng)于獨攬了@property和@synthesize的功能.

2)重寫setter/getter方法(手寫實現(xiàn)):
1)如果手動實現(xiàn)了set方法,那么編譯器就只生成get方法和實例變量;
2)如果手動實現(xiàn)了get方法,那么編譯器就只生成set方法和實例變量;
3)如果set和get方法都是手動實現(xiàn)的,那么編譯器將不會生成實例變量。

(五)nonatomic 與 atomic(了解)
(1)nonatomic 與 atomic用來決定編譯器生成的setter和getter方法是否為原子操作.
(2)atomic:是一種線程保護(hù)技術(shù),提供線程安全.是為了防止在寫未完成的時候,就被另外一個線程讀取,從而造成數(shù)據(jù)的錯誤.但是這種機(jī)制耗費系統(tǒng)資源.
nonatomic:如果對象不用考慮多線程的情況,那么就可以使用nonatomic,可以提高執(zhí)行效率.
(3)在多線程環(huán)境下,原子操作是必要的,否則可能引起錯誤的結(jié)果.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容