self.firstName=@"aaa";
_fristName=@"aaa";
这两种写法有几个区别
- 由于不经过Objective-C的“方法派发”(method dispatch),所以直接访问实例变量的速度当然比较快。在这种情况下,编译器所生成的代码会直接方位保存对象实例变量的那块内存。
- 直接方位实例变量时,不会调用其“设置方法”,这就绕过了为相关属性所定义的“内存管理语义”。比方说,如果在ARC下直接访问一个声明为copy的属性,那么并不会拷贝属性,只会保留新值并释放旧值。
- 如果直接访问实例变量,那么不会触发“键值观测”(Key-Value Oberving,KVO)通知。这样做是否会产生问题,还取决于具体的对象行为。
- 通过属性来访问有助于排查与之相关的错误,因为可以给“获取方法”和/或 “设置方法”中新增“断点”(breakpoint),监控该属性的调用者及其访问时机。
要点
- 在对象内部读取数据时,应该直接通过实例变量来读,而写入数据时,则应通过属性来写。
- 在初始化方法及dealloc方法中,总是应该直接通过实例变量来读写数据。
- 有时会使用惰性初始化技术配置某份数据,这种情况下,需要通过属性来读取数据。
第7条:在对象内部尽量直接访问实例变量
原文:http://www.cnblogs.com/lanyayue/p/5293867.html