self.array 和 _array的区别

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值