在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.造成循环引用.不过下划线风格比较隐蔽,容易被忽略.