main.storyboard
main.storyboard
又會加載箭頭所指的控制器view
裏面建立的子控件view
裏面的全部東西都建立完之後,就會加載plist數據顧名思義,懶就是懶惰。懶加載就是用到的時候再加載,不用就不加載,並且也只加載一次。ios
(前面已經定義好了一個NSArrary
數組,數組名爲shops)數組
-(NSArrary *)shops { NSBundle *bundle = [NSBundle mainBundle]; NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"]; _shops = [NSArray arrayWithContentsOfFile:file]; return _shops; }
若是就這麼寫的話,會出現一個問題,就是下面的代碼中每調用一次都會從新加載一次,而咱們想要實現的是文件只加載一次,所以要在前面加一個判斷,在每次調用的時候判斷數據是否爲空,若是不爲空,就不須要加載,直接用就能夠了code
-(NSArrary *)shops { if(_shops == nil) { NSBundle *bundle = [NSBundle mainBundle]; NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"]; _shops = [NSArray arrayWithContentsOfFile:file]; } return _shops; }
在ios六、7那會,會有一個-(void) viewDidUnload;
方法,當內存發生不足警告的時候,系統會自動調用該方法,將一些不經常使用的控制器刪掉,同時會將plist文件銷燬,以釋放內存空間。若是不用懶加載,那麼當再次出發該控制器時,便再也找不到數據了,程序就無法運行。而用了懶加載後,能夠保證不管何時內存被清掉,但只要想用,就能從新加載出數據。blog
上面代碼中出現了三個_shops
,那麼這三處能不能換成self.shops
呢?咱們知道_shops是直接訪問成員變量,而self.shops是調用shops的getter\setter方法。內存
self.shops
,就至關於[self shops]
,這樣程序一來到if判斷語句,就會調用shops的get方法,也就是調用本身自己,這樣就陷入了死循環。[self setShops]
,這裏是能夠的做者:黎明豌豆
出處:http://www.cnblogs.com/PeaZora/
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此字段聲明,且在文章頁面明顯位置給出原文連接,不然保留追究法律責任的權利get