懶加載愤钾,即延遲加載,需要的時(shí)候再加載到內(nèi)存候醒。
一次性加載數(shù)據(jù)能颁,類似C語言中變量的定義,需要統(tǒng)一在函數(shù)體的最開始部分定義倒淫。iOS的設(shè)備的內(nèi)存普遍不大伙菊,因此一次性加載會(huì)使程序運(yùn)行緩慢。
懶加載敌土,類似C++語言镜硕,靈活度更高,需要用到的時(shí)候再定義返干。而且有些數(shù)據(jù)在后期加載時(shí)兴枯,可能前面已經(jīng)有些數(shù)據(jù)被釋放了,內(nèi)存會(huì)比之前一次性加載輕松矩欠。
同樣的道理财剖,iOS中大概有兩種形式的懶加載:
- 數(shù)據(jù)的懶加載
- UI 控件的懶加載,這大部分是 iOS 的內(nèi)部封裝
這兩種形式的懶加載的加載方式都是同一種癌淮,都是對(duì)屬性的getter方法的重寫峰伙。
01. // 數(shù)據(jù)的懶加載
02. // 1、定義一個(gè)存儲(chǔ)數(shù)據(jù)對(duì)象的屬性该默,例如加載plist文件
03. @property (nonatomic, strong) NSArray *array; //plist文件的數(shù)據(jù)一般加載到數(shù)組對(duì)象中瞳氓,數(shù)組屬性 -- strong
04. ...
05. // 2、實(shí)現(xiàn)getter方法的重寫
06. - (NSArray *)array{
07. //判斷擴(kuò)展的成員是否為nil栓袖,即判斷是否為首次懶加載匣摘,懶加載核心就是為了懶,當(dāng)然對(duì)于加載操作做的越少越好
08. if(_array == nil) // 需要注意這里不能self.array == nil裹刮,會(huì)陷入死循環(huán)音榜,很多時(shí)候還是要區(qū)分_array 和 self.array 的
09. {
10. // 具體見plist文件的讀寫
11. }
12. return _array; // 這里_array != self.array
13. }
14. ...
01. // UI 控件的懶加載
02. // iOS 內(nèi)部的一個(gè)例子,表視圖的單元格中的UIImageView捧弃,UILabel等
03. @property (strong, nonatomic) UIImageView *imageView;
04. @property (strong, nonatomic) UILabel *textLabel;
05. // 當(dāng)然赠叼,這些被封裝了,也不知道到底是不是违霞,但感覺上如果是懶加載比較好
06. // 表視圖的單元格由4種格式嘴办,并不是所有格式都需要圖片控件的,因此感覺懶加載會(huì)更靈活
07. - (UIImageView *)imageView
08. {
09. if(_imageView == nil){
10. _imageView = [[UIImageView alloc] initWithFrame: ...];
11. ... // 圖片控件的配置信息
12. }
13. return _imageView;
14. }