美文网首页
懒加载(LazyLoad)

懒加载(LazyLoad)

作者: 磨剑十年 | 来源:发表于2017-04-20 21:23 被阅读0次

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

    一次性加载数据,类似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)

          本文链接:https://www.haomeiwen.com/subject/cuzlzttx.html