self.array 和 _array的区别

来源:互联网 发布:豫广网络维修电话 编辑:程序博客网 时间:2024/06/06 05:40

</pre><p>今天早上遇到一个问题,在给数组array添加元素的时候,发现如下情况</p><p>在有懒加载的前提下:</p><p><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,STheiti,微软雅黑,黑体,Arial,Tahoma,sans-serif,serif; font-size:14px; line-height:24px"></span></p><pre name="code" class="objc">[self.array addObject: @"1"];  
self.array可以通过这个方法添加对象成功,
[_array addObject: @"1"]  
  而_array添加对象不成功?


通过查找资料,发现self.array 和 _array的访问的区别:

1.内存机制的不同

self.array相当于〔self getArray〕,_arr相当于self->_array。一个是访问属性,一个是访问成员变量。

使用self.array时会执行get方法,也就是(NSArray * )array{}这个方法。

如果在懒加载的时候,最后返回的是return self.array;这样会进入一个死循环

相当于

 - (NSarray *)array{                  ........                  return [self array];                    } 
注意:如果没有重写(NSArray * )array{},self.array和_array效果一样。、


2.KVO的区别

self.array 会激活通知中心 。
_array 就不会 。


建议:如果没有使用懒加载,直接初始化的话,两者在添加元素方面是一样的,但是直接访问不会触发set和get方法,个人建议是除了在set和get方法里使用下划线直接访问变量,外面都使用self.来调用 


0 0