懶加載

爲何要用懶加載

1.首先看一下程序啓動過程:(如圖)

  • 會有一個mian的設置,程序一啓動會加載main.storyboard
  • main.storyboard又會加載箭頭所指的控制器
  • 控制器一旦加載,就會加載view裏面建立的子控件
  • 直到view裏面的全部東西都建立完之後,就會加載plist數據

2.爲何要用懶加載

  • 程序一啓動,數據就會加載完成,但有時可能數據較大,並且數據加載完成後,用戶頗有可能會很長時間用不到這些數據,這樣會使得程序一啓動,就會佔用很大的內存,很浪費。所以,咱們通常會選用懶加載對數據進行加載。

什麼是懶加載

顧名思義,懶就是懶惰。懶加載就是用到的時候再加載,不用就不加載,並且也只加載一次。ios

懶加載的思路

懶加載其實就是重寫get方法

(前面已經定義好了一個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方法。內存

  • 第一處:從代碼中能夠看出,第一處的_shops顯然是拿出它的值與nil進行比較,既然是拿出值,就應該是調用get方法,若是改爲self.shops,就至關於[self shops],這樣程序一來到if判斷語句,就會調用shops的get方法,也就是調用本身自己,這樣就陷入了死循環。
  • 第三處:同理,return語句就是取出值進行返回,既然是取出,就是調用get方法,這樣也會陷入死循環。
  • 第二處:從代碼看,是將後面的值賦給_shops,既然是賦值,那就是調用set方法,所以若是將這裏的_shops換成self.shops的話,是至關於[self setShops],這裏是能夠的
所以在使用self的時候,必定要當心是調用get仍是set方法,以避免陷入死循環。

做者:黎明豌豆
出處:http://www.cnblogs.com/PeaZora/
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此字段聲明,且在文章頁面明顯位置給出原文連接,不然保留追究法律責任的權利get

相關文章
相關標籤/搜索