Xcode 中出現(xiàn):Block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior
self.xxx與_xxx的區(qū)別
1..首先通過self.xxx 通過訪問的方法的引用:包含了set和get方法序愚。而通過下劃線是獲取自己的實(shí)例變量,不包含set和get的方法。
2.self.xxx
是對(duì)屬性的訪問藤肢;而_xxx是對(duì)局部變量的訪問诱建。
getter带欢,setter方法時(shí)是有優(yōu)先級(jí)的邮府,他首先查找當(dāng)前的類中用戶是否定義屬性的getter胁塞,setter方法咏尝,如果有,則編譯器會(huì)跳過啸罢,不會(huì)再生成编检,使用用戶定義的方法。也就是說你在使用self.xxx時(shí)是調(diào)用一個(gè)getter方法扰才。會(huì)使引用計(jì)數(shù)加一允懂,而_xxx不會(huì)使用引用技術(shù)加一的。
所以使用self.xxx是更好的選擇衩匣,因?yàn)檫@樣可以兼容懶加載蕾总,同時(shí)也避免了使用下滑線的時(shí)候忽略了self這個(gè)指針,后者容易在BLock中造成循環(huán)引用琅捏。同時(shí)生百,使用 _是獲取不到父類的屬性,因?yàn)樗皇菍?duì)局部變量的訪問午绳。
總結(jié):self方法實(shí)際上是用了get和set方法間接調(diào)用置侍,下劃線方法是直接對(duì)變量操作。