Tip之Self vs _

weixin_34019929發表於2016-06-05

在iOS中,定義的屬性可以通過self.property或者_property獲得.那到底應該用那種呢?

答案是都可以,各有不同,自行取捨.但是,一定要統一!統一!統一!

  • init和alloc中不要使用self風格.所以在這兩個地方就只能使用下劃線風格,一定程度上造成風格的割裂.
  • self風格走訊息轉發路線,效率比下劃線風格低.儘管絕大多數時候,這種效率可以忽略.
  • self風格無法方便的知道getter/setter是否被重寫.當你部分屬性重寫了getter/setter而部分沒有的時候,開發人員很難通過程式碼知道是否有重寫.除非手動呼叫[self property].而下劃線風格則不會.
  • self風格使得kvo正常工作.而下劃線則不可以.原因是,kvo本質上是在setter方法中新增will change和did change的notification.如果使用下劃線風格,根本不會進入方法進行,觸發notification也就無從談起.
  • self風格在一定程度上能夠輔助屬性的追蹤.當一個屬性被非常繁瑣的呼叫/變更時.重寫getter並且打上日誌是一個很不錯的方式.尤其是維護不熟悉的程式碼,效果可能比斷點更好.
  • 下劃線風格更短,更簡潔.
  • 在block中,self風格和_風格都可能retain.造成迴圈引用.不過下劃線風格比較隱蔽,容易被忽略.

相關文章