第7条:在对象内部尽量直接访问实例变量

self.firstName=@"aaa";

_fristName=@"aaa";

这两种写法有几个区别

  •   由于不经过Objective-C的“方法派发”(method dispatch),所以直接访问实例变量的速度当然比较快。在这种情况下,编译器所生成的代码会直接方位保存对象实例变量的那块内存。
  • 直接方位实例变量时,不会调用其“设置方法”,这就绕过了为相关属性所定义的“内存管理语义”。比方说,如果在ARC下直接访问一个声明为copy的属性,那么并不会拷贝属性,只会保留新值并释放旧值。
  • 如果直接访问实例变量,那么不会触发“键值观测”(Key-Value Oberving,KVO)通知。这样做是否会产生问题,还取决于具体的对象行为。
  • 通过属性来访问有助于排查与之相关的错误,因为可以给“获取方法”和/或 “设置方法”中新增“断点”(breakpoint),监控该属性的调用者及其访问时机。

 

  要点

  •   在对象内部读取数据时,应该直接通过实例变量来读,而写入数据时,则应通过属性来写。
  •     在初始化方法及dealloc方法中,总是应该直接通过实例变量来读写数据。
  •     有时会使用惰性初始化技术配置某份数据,这种情况下,需要通过属性来读取数据。
posted @ 2016-03-18 22:05  lanyayue  阅读(216)  评论(0)    收藏  举报