本文介绍: 我们使用iOS设备内存都有一定的限度,如果在程序启动时就将程序内的所有资源数据图片视频)都加载完,那么有可能耗尽我的iOS设备内存。懒加载也称延迟加载比如控制器view创建),就是在开发中,当程序启动时不一次性加载所有的资源,而是在需要一些资源的时候程序才去加载这些资源(效率低,占用内存小),所谓的懒加载,其实就是对实例getter方法重写。…

一、什么是懒加载

我们使用iOS设备内存都有一定的限度,如果在程序启动时就将程序内的所有资源(数据图片视频)都加载完,那么有可能耗尽我的iOS设备内存
懒加载也称延迟加载(比如控制器view创建),就是在开发中,当程序启动时不一次性加载所有的资源,而是在需要一些资源的时候程序才去加载这些资源(效率低,占用内存小),所谓的懒加载,其实就是对实例getter方法重写

二、懒加载的使用

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {
    UILabel* _lable;
}
@property(strong,nonatomic)UILabel* lable;

@end

注意:定义属性时要定义strongstrong会使修饰对象引用计数加一,而weak不会,如果一个对象引用计数为0的话系统就会自动将其销毁 如果你想让一个控件生命周期随着你的控制器被销毁才去释放,那就使用strong;如果你仅仅是想让它在被移除视图之后就被销毁,那就使用weak

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor greenColor];
    [self Lable];
    // Do any additional setup after loading the view.
}
- (UILabel*)Lable {
    if(!_lable) {
        _lable = [[UILabel alloc] init];
        _lable.text = @"zjh";
        _lable.frame = CGRectMake(50, 80, 80, 80);
        [self.view addSubview:_lable];
    }
    return _lable;
}

@end

重写getter方法,当_lable不为空时,将其实例化。
注意:不能将括号中任意一个_lable换做self.label,所谓的点语法,就相当于调这个方法,在外部调用语法时就形成无限循环.

三、 懒加载的优点

1.不需要将对象实例化全部写到viewDidLoad中,可以简化代码,增强代码的可读性。
2.对系统的内存占用率会减少。

四、懒加载的缺点

1.使用泛滥会导致可读性变差,每使用一次懒加载,代码就会增加几行,那么当你程序使用大量的懒加载它的代码量就会比普通方法的代码量多,看起来反而更加的繁琐,可读性自然也就没有那么强了。
2.使用不当会导致死循环,导致crash,程序无法分清调用的是 getter 方法还是实例变量,会造成死循环。
3.代码量增加(每增加一个懒加载,代码平均多出3-4行)。

原文地址:https://blog.csdn.net/weixin_61558111/article/details/126216013

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_17835.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注