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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章