美文网首页
iOS懒加载

iOS懒加载

作者: 呆呆羞 | 来源:发表于2017-06-09 12:22 被阅读0次


iOS懒加载

简单的讲就是拖到最后一刻,万不得已了,才加载,才开始占用资源。所谓懒加载,写的就是其getter方法。在开发中,当程序中需要利用的资源时,在程序启动的时候不加载,只有在运行当需要这些资源的时候再去加载这些资源。
更直观理解,就是,一个页面中,view,data,首次加载不需要懒加载,其他的都可以理解成,由懒加载完成。因为改程序还不需要它,呈现,为什么要先让它加载呢?需要时候,在加载就好啦

为什么要使用懒加载?

iPhone设备内存有限,如果在程序在启动后就一次性加载将来会用到的所有资源,那么久可能会耗尽iOS设备的内存。这些资源例如大量的数据,图片,音频,过多的控件等。

懒加载的好处?

1.不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强。

2.每个属性的getter方法中分别负责鸽子的实例化处理,代码彼此间的独立性更强。

3.只有当真正需要资源的时候,再去加载,节省了内存资源。

如何懒加载?

不多说,直接上代码:
#import "ViewController.h"

    @interface ViewController ()
    /**
     一个图片视图
     */
    @property (nonatomic,strong) UIImageView  * imageView;

    @end

    @implementation ViewController
    /**
   懒加载一个图片视图

   @return 返回一个图片视图
   */
    -(UIImageView *)imageView{
         NSLog(@"11111111");
        if (!_imageView) {
             NSLog(@"2222222");
            _imageView=[[UIImageView alloc]init];
            NSLog(@"3333333");
            [_imageView setFrame:CGRectMake(50, 50, 100, 100)];
    
        }
        NSLog(@"444444");
        return _imageView;
    }

    - (void)viewDidLoad {
        [super viewDidLoad];
        NSLog(@"000000");
//调用懒加载
        [self imageView];
        _imageView.backgroundColor=[UIColor redColor];
        NSLog(@"5555555");
        [self.view addSubview:_imageView];
        NSLog(@"6666666");
    }

下面说一下值得注意几点:

第一,

在需要的时候,调用懒加载时候,就是:

[self imageView];
[self.view addSubview:_imageView];

所以,也可以直接表达成:

[self.view addSubview:self.imageView]

第二,

由第一点,可以说明,调用懒加载时候,就是调用了get方法。
所以如果,懒加载写成如下:

-(UIImageView *)imageView{
         NSLog(@"11111111");
        if (!self.imageView) {
             NSLog(@"2222222");
            _imageView=[[UIImageView alloc]init];
            NSLog(@"3333333");
            [_imageView setFrame:CGRectMake(50, 50, 100, 100)];

        }
        NSLog(@"444444");
        return _imageView;
    }
或者:
-(UIImageView *)imageView{
         NSLog(@"11111111");
        if (!_imageView) {
             NSLog(@"2222222");
            _imageView=[[UIImageView alloc]init];
            NSLog(@"3333333");
            [_imageView setFrame:CGRectMake(50, 50, 100, 100)];

        }
        NSLog(@"444444");
        return  self.imageView;
    }

那么就会出现“死循环”。

为什么呢?

需要时候,开始调用了懒加载,用get方法。
进入到懒加载的方法之后,if和retrun 再次调用了self.imageView,调用了get方法。
就反反复复地,死循环啦。
可以尝试复制代码。
改变一下,
if和retrun 的self.imageView,
看看打印的顺序就明白啦。

文章仅供参考,如果写错了,请及时留言我及时更正。谢谢您支持

相关文章

  • Swift的懒加载和只读属性的介绍

    懒加载 在 iOS 开发中,懒加载是无处不在的 懒加载的格式如下: lazy var person: Person...

  • iOS-UI-懒加载

    原文找不到了 iOS-UI-懒加载 1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内...

  • 2018-12-21

    iOS开发中懒加载遇到的坑 正常写一个懒加载对象 - (MAMapView*)mapView{ if(nil=...

  • iOS 数组 NSArray 遍历 懒加载总结

    iOS开发之懒加载 iOS中数组遍历的方法及比较

  • iOS开发——懒加载

    懒加载的定义 懒加载也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。iOS设备的内存有限,如果程序在启...

  • # 懒加载

    在 iOS 开发中,懒加载是无处不在的 懒加载的格式如下: 懒加载本质上是一个闭包 以上代码可以改写为以下格式 懒...

  • iOS开发之懒加载

    iOS开发之懒加载 在iOS开发中几乎经常用到懒加载技术,比如我们存放网络数据的数组,控制器的view,控件的自定...

  • iOS 懒加载

    懒加载:也称延时加载,即在对象用到的的时候才加载。其实懒加载,就是所谓的重写对象的get方法,当系统或者开发者调用...

  • iOS懒加载

    所谓的懒加载可以定义为:延时加载,即当对象需要用到的时候再去加载。其实就是所谓的重写对象的get方法,当系统或者开...

  • iOS懒加载

    iOS懒加载 简单的讲就是拖到最后一刻,万不得已了,才加载,才开始占用资源。所谓懒加载,写的就是其getter方法...

网友评论

      本文标题:iOS懒加载

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