OC 中self. 與 下劃線的區別

@property (nonatomic,copy) NSString *propertyName;

self.propertyName是對屬性的訪問;使用_propertyName是對局部變量的訪問。

所有被聲明爲屬性的成員,在iOS5 之前需要使用編譯器指令@synthesize 來告訴編譯器幫助生成屬性的getter,setter方法。之後這個指令可以不用人爲指定了,默認情況下編譯器會幫我們生成。 編譯器在生成getter,setter方法時是有優先級的,它首先查找當前的類中用戶是否已定義屬性的getter,setter方法,如果有,則編譯器會跳過,不會再生成,使用用戶定義的方法。 也就是說你在使用self.propertyName 時是在調用一個getter方法。

self.propertyName 會讓計數器+1;_propertyName卻不會。  

_propertyName是類似於self->_propertyName。

用self.propertyName 是更好的選擇,因爲這樣可以兼容懶加載,同時也避免了使用下劃線的時候忽視了self這個指針,後者容易在block中造成循環引用。

發佈了52 篇原創文章 · 獲贊 26 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章