iOS-self.和下劃線訪問的區別

本文轉載自iOS中self.和下劃線的區別ios

1.經過self.xxx的訪問調用了方法:包含了set和get方法。而經過下劃線的訪問是獲取本身的實例變量,不包含set和get的方法。spa

2.self.xxx是對屬性的訪問;而_xxx是對局部變量的訪問。全部被聲明爲屬性的成員,再ios5以前須要使用編譯指令@synthesize 來告訴編譯器幫助生成屬性的getter和setter方法,以後這個指令能夠不用認爲的指定了,默認狀況下編譯器會幫助咱們生成。指針

譯器在生成getter,setter方法時是有優先級的,他首先查找當前的類中用戶是否認義屬性的getter,setter方法,若是有,則編譯器會跳過,不會再生成,使用用戶定義的方法。也就是說你在使用self.xxx時是調用一個getter方法。會使引用計數加一,而_xxget

不會使用引用計數加一的。因此使用self.xxx是更好的選擇,由於這樣能夠兼容懶加載,同時也避免了使用下滑線的時候忽略了self這個指針,後者容易在Block中形成循環引用。同時,使用 _是獲取不到父類的屬性,由於它只是對局部變量的訪問。編譯器

總結:self方法其實是用了get和set方法間接調用,下劃線方法是直接對變量操做。io

相關文章
相關標籤/搜索