对象内部尽量直接访问实例变量
一、直接访问实例变量和直接访问属性区别
1)直接访问实例变量不经过Objective-C的“方法派发”步骤速度比较快,编辑器生成的代码会直接访问保存对象实例变量的那块内存。
2)直接访问实例变量可以绕过属性所定义的“内存管理语义”,比方说在ARC下直接访问一个声明为copy的属性,并不会拷贝该属性,只会保留新值释放旧值。
3)直接访问实例变量不会触发KVO通知。
4)通过属性来定义有助于排查与之相关的错误,可以给属性的set方法和get方法添加断点,监控该属性的调用者及其访问时机。
二、实际使用
1.在对象内部读取数据时,应该直接通过实例变量来读,这样读取速度比较快,但有几种情况需要通过访问属性:
1)无法在子类直接访问父类的实例变量子类需要通过属性访问
2)懒加载
3)写入数据时通过属性来写,这样可以控制属性操作,贯彻内存管理语义。
2.在初始化方法及dealloc方法中,总是应该通过实例变量来读写数据,防止子类重写了属性的读取方法使属性读写出现错误。
浙公网安备 33010602011771号