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

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

两种写法的区别：

* 直接访问，由于没经过OC的“方法派发”（method dispatch）步骤，所以速度比较快。其编译所生成的代码会直接访问保存对象实例变量的那块内存
* 直接访问，不会调用`setter`方法，绕过了为相关属性定义的“内存管理语义”。（如：ARC下直接访问一个copy属性，不会拷贝该属性，只会保留新值并释放旧值）
* 直接访问，不会出访“键值观测”（KVO）通知，这样做是否有问题，还取决于具体的对象行为
* 通过属性访问，有助于排查与之相关的错误，因为可以在`setter`或`getter`中新增“断点”（breakpoint），监控该属性调用者及其访问时机

要点：

* 在对象内部读取数据时，应该直接通过实例变量来读，而写入数据时，则应该通过属性来写
* 在初始化方法及`dealloc`方法中，总是应该直接通过实例变量来读写数据
* 有时会使用惰性初始化技术配置某份数据，此时需要通过属性来读取数据
