</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.来调用