在对象之外访问实例变量,总是应该通过属性。
笔者建议,在读取实例变量采用直接访问的形式,在设置实例变量通过属性。
直接访问实例变量不经过Objective-C的“方法派发”,所以速度比较快;但是直接访问实例变量绕过相关属性所定义的“内存管理语义”。比如:在ARC下直接访问一个声明为copy属性,那么并不会直接拷贝该属性,只会保留新值释放旧值;直接访问
实例变量,不会触发“键值观测”。
通过属性访问有助于排查与之相关错误,可以给“获取“和”设置方法“新增”断点“。
注意地方:
1,初始化方法中应该直接访问实例变量,因为子类可能会”覆写“设置方法。但是某些情况必须初始化方法调用设置方法:如果待初始化的实例变量声明在超类中,无法在子类中直接访问实例变量,需要调用”设置方法“。
2,”惰性初始化“,必须通过”获取方法“来访问属性,否则实例永远不会初始化。
- (NSMutableArray *)myOrderAarray{
if (_myOrderAarray == nil) {
_myOrderAarray = [NSMutableArray array];
}
return _myOrderAarray;
}
3,在初始化方法已dealloc方法中,总是应该直接通过实例变量来读写数据。
网友评论