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中造成循環引用。