编程的有效方法--实例变量的访问

1、为什么写这篇微博

  在对象外部访问实例变量时,通过属性来作,而在对象内部访问实例变量,是应该直接访问还是通过属性访问,一直存在着很大争议。要想解决这一问题,必须明白这两者实现方式的区别;

2、二者实现方式的区别

  通过直接访问的形式不经过OC的”方法派发“(以后会深入)的步骤,访问的速度较快一些。这种方式会直接访问实例变量的那块内存,而不会调用其设置方法,这样就绕过了实例变量所定义的“内存管理语义”。比如,在ARC下直接访问被Copy所定义的实例变量,它不会拷贝这个实例变量。

  如此一来,就引申出了这样的一个现象。通过直接访问实例变量的方式,不会触发KVO,因为KVO的触发是基于内存地址的改变。

  通过属性访问实例变量有助于我们排查错误,例如我们可以在setter或者getter方法中新增断点,检测引用时机;

3、二者的使用时机

  1>在对象内部访问实例变量时,应该使用直接访问来读,通过属性来写;

  2>在初始化和delloc方法中,应该使用直接访问的方式读和写;(子类中可能覆写了父类的setter方法)

  3>有时会使用惰性初始化来配置某一份数据,此时应该通过属性写入数据;(懒加载)

posted @ 2016-08-04 18:22  来事啊  阅读(488)  评论(0编辑  收藏  举报