</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.來調用