7、在对象内部尽量直接访问实例变量

建议:读取变量时用直接访问实例变量的形式,设置变量时通过属性来做。

两种写法的区别:

  • 直接访问,由于没经过OC的“方法派发”(method dispatch)步骤,所以速度比较快。其编译所生成的代码会直接访问保存对象实例变量的那块内存

  • 直接访问,不会调用setter方法,绕过了为相关属性定义的“内存管理语义”。(如:ARC下直接访问一个copy属性,不会拷贝该属性,只会保留新值并释放旧值)

  • 直接访问,不会出访“键值观测”(KVO)通知,这样做是否有问题,还取决于具体的对象行为

  • 通过属性访问,有助于排查与之相关的错误,因为可以在settergetter中新增“断点”(breakpoint),监控该属性调用者及其访问时机

要点:

  • 在对象内部读取数据时,应该直接通过实例变量来读,而写入数据时,则应该通过属性来写

  • 在初始化方法及dealloc方法中,总是应该直接通过实例变量来读写数据

  • 有时会使用惰性初始化技术配置某份数据,此时需要通过属性来读取数据

Last updated

Was this helpful?