懒加载(LazyLoad)

懒加载,即延迟加载,需要的时候再加载到内存。

一次性加载数据,类似C语言中变量的定义,需要统一在函数体的最开始部分定义。iOS的设备的内存普遍不大,因此一次性加载会使程序运行缓慢。

懒加载,类似C++语言,灵活度更高,需要用到的时候再定义。而且有些数据在后期加载时,可能前面已经有些数据被释放了,内存会比之前一次性加载轻松。

同样的道理,iOS中大概有两种形式的懒加载:

  • 数据的懒加载
  • UI 控件的懒加载,这大部分是 iOS 的内部封装

这两种形式的懒加载的加载方式都是同一种,都是对属性的getter方法的重写。

01. // 数据的懒加载
02. // 1、定义一个存储数据对象的属性,例如加载plist文件
03. @property (nonatomic, strong) NSArray *array;  //plist文件的数据一般加载到数组对象中,数组属性 -- strong
04. ...
05. // 2、实现getter方法的重写
06. - (NSArray *)array{
07.     //判断扩展的成员是否为nil,即判断是否为首次懒加载,懒加载核心就是为了懒,当然对于加载操作做的越少越好
08.     if(_array == nil)    // 需要注意这里不能self.array == nil,会陷入死循环,很多时候还是要区分_array 和 self.array 的
09.     {
10.             // 具体见plist文件的读写
11.     }
12.     return _array;   // 这里_array != self.array
13. }
14. ...
01. // UI 控件的懒加载
02. // iOS 内部的一个例子,表视图的单元格中的UIImageView,UILabel等
03. @property (strong, nonatomic) UIImageView *imageView;
04. @property (strong, nonatomic) UILabel *textLabel;
05. // 当然,这些被封装了,也不知道到底是不是,但感觉上如果是懒加载比较好
06. // 表视图的单元格由4种格式,并不是所有格式都需要图片控件的,因此感觉懒加载会更灵活
07. - (UIImageView *)imageView
08. {
09.     if(_imageView == nil){
10.             _imageView = [[UIImageView alloc] initWithFrame: ...];
11.             ...    // 图片控件的配置信息
12.      }
13.      return _imageView;
14. }

你可能感兴趣的:(懒加载(LazyLoad))