OC在类文件的内部访问实例变量,有直接访问和使用getter/setter方法访问两种方式,它们的区别有:
1、直接访问不经过OC的方法分发(method dispatch),所以访问速度比较快,在这种情况下,编译器所生成的代码会直接访问保存对象实例变量的那块内存。
2、直接访问实例变量时,不会调用setter方法,这样就绕过了为相关属性所定义的内存管理语义。例如在ARC下面直接访问一个声明为copy的属性,就不会拷贝该属性,只会保留新值释放旧值。
3、如果直接访问实例变量,不会触发键值观察(key-value observing)通知。
4、通过属性的getter/setter访问可以通过设置断点帮助调试错误。
综上所述,推荐在写入实例变量时使用setter,在读取时使用直接访问的方式。
当然,如果属性使用了lazy initialization,那就需要通过getter/setter来访问了。