在iOS中,定義的屬性可以通過self.property或者_(dá)property獲得.那到底應(yīng)該用那種呢?
答案是都可以,各有不同,自行取舍.但是,一定要統(tǒng)一!統(tǒng)一!統(tǒng)一!
- init和alloc中不要使用self風(fēng)格.所以在這兩個(gè)地方就只能使用下劃線風(fēng)格,一定程度上造成風(fēng)格的割裂.
- self風(fēng)格走消息轉(zhuǎn)發(fā)路線,效率比下劃線風(fēng)格低.盡管絕大多數(shù)時(shí)候,這種效率可以忽略.
- self風(fēng)格無(wú)法方便的知道getter/setter是否被重寫.當(dāng)你部分屬性重寫了getter/setter而部分沒有的時(shí)候,開發(fā)人員很難通過代碼知道是否有重寫.除非手動(dòng)調(diào)用
[self property].而下劃線風(fēng)格則不會(huì). - self風(fēng)格使得kvo正常工作.而下劃線則不可以.原因是,kvo本質(zhì)上是在setter方法中添加will change和did change的notification.如果使用下劃線風(fēng)格,根本不會(huì)進(jìn)入方法進(jìn)行,觸發(fā)notification也就無(wú)從談起.
- self風(fēng)格在一定程度上能夠輔助屬性的追蹤.當(dāng)一個(gè)屬性被非常繁瑣的調(diào)用/變更時(shí).重寫getter并且打上日志是一個(gè)很不錯(cuò)的方式.尤其是維護(hù)不熟悉的代碼,效果可能比斷點(diǎn)更好.
- 下劃線風(fēng)格更短,更簡(jiǎn)潔.
- 在block中,self風(fēng)格和_風(fēng)格都可能retain.造成循環(huán)引用.不過下劃線風(fēng)格比較隱蔽,容易被忽略.