属性存取、直接访问实例变量

属性的读取采用点语法,访问对应的set和get方法。而直接访问是直接访问的对象实例的内存。这二者有什么区别?在什么状况应该使用哪一种方法呢?spa

 

1、区别调试

直接访问实例变量有以下几种特质。对象

一、不通过Objective-C的方法派发,直接访问实例变量的内存,速度快。内存

二、因为没调用set方法,因此绕过了属性定义时声明的“内存管理语义”,只会保留新值,释放旧值。get

三、不会触发“键值观测”KVO机制。内存管理

四、没法经过给set和get打断点来进行调试。变量

 

2、使用场景语法

通用状况:方法

在类的外部,使用属性存取。co

在类的内部,若是是设置实例变量,采用属性设置,若是是获取实例变量,直接获取。

特殊状况:

一、在对象初始化方法中,尽可能采用直接访问,但若是是超类的实例变量,就只能用属性存取;

二、在类的内部,若是在get方法中,惰性初始化某实例变量,那只能使用属性存取。

相关文章
相关标签/搜索