iOS回顧之路-懶加載

cxh0624 8年前發布 | 8K 次閱讀 iOS開發 移動開發

最近會根據自己收藏的優秀博文和自己從業以來遇到的問題進行總結。知識有限,請各位大神指點不足。

細說懶加載

之所以使用到懶加載是因為設備內存有限,如果在程序啟動后就一次性加載將來會用到的所有資源,就可能會耗盡設備的內存。比如大量的數據、圖片、音頻、過多的控件等。

針對這一問題,就引入了懶加載的概念:在程序啟動的時候不加載,只在運行時需要這些資源的時候再去加載這些資源。(提醒:這是蘋果公司提倡的做法。其實蘋果公司做的iOS系統中很多地方都用到了懶加載的方式,比如控制器的View的創建。)

這么做的好處也是顯而易見的:我們不必將創建對象的代碼全部寫在viewDidLoad方法中,這樣可以使代碼的可讀性更強。每個控件的getter方法中分別負責各自的實例化處理,代碼彼此之間的獨立性強,低耦合。更重要的是當真正需要資源的時候才去加載資源,節省了內存資源。

懶加載的思路

1.在類擴展中創建一個屬性

2.重寫這個屬性對應的getter,將要實現的邏輯放到這個getter中

3.考慮到懶加載只加載一次,那么在實現邏輯之前應該判斷一下這個屬性是否為空,為空才執行邏輯,否則直接返回這個屬性

//創建一個可變字典屬性
@interface ViewController ()
@property (nonatomic ,strong)NSMutableDictionary *dic;
@end
@implementation ViewController
//重寫這個屬性
-(NSMutableDictionary *)dic{
//判斷字典是否已經存在,若沒有,則進行實例化
    if (_dic == nil) {
        _dic = [NSMutableDictionary dictionary];
    }
    return _dic;
}
@end

注意1.指針循環引用問題

if (!_dic)不可以寫成 if (!self.dic),不然就會形成循環引用指針。
return _dic;不可以寫成 return self.dic,不然會形成循環引用。

注意2.關于布局的問題

如果你用vfl語句或者封裝的Masonry布局頁面的話,關于frame的代碼一定不能放重寫的
get方法里面,不然會報“找不到父視圖”的錯誤。要放在addSubVie后面

1.png

 

 

來自:http://www.jianshu.com/p/b54a07b78432

 

 本文由用戶 cxh0624 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!