iOS懒加载



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,
看看打印的顺序就明白啦。

文章仅供参考,如果写错了,请及时留言我及时更正。谢谢您支持
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 180,117评论 25 708
  • 写在前面 昨天晚上写的那个代码在配置数组数据的时候突然想到加载数据的时候可以不用在viewDidLoad中加载,可...
    劉光軍_MVP阅读 2,380评论 1 6
  • 写在前面 代码在配置数组数据的时候可以不用在viewDidLoad中加载,可以什么时候用什么时候加载,这种技术就是...
    无沣阅读 272评论 0 0
  • 懒加载 1.懒加载 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其ge...
    Eddiegooo阅读 1,803评论 0 2
  • 最近朋友圈流行抽签测算运势,我也跟风抽了一签:旅行。 作者 我叫回声,他叫许原风,我见他第一眼的时候,阳光正好从他...
    b629bce7c08d阅读 230评论 0 2

友情链接更多精彩内容