懒加载

懒加载

懒加载,亦叫延迟加载,即在第一次需要的时候才去加载,本质上就是对一个实例的getter方法的重写。
我的理解是, 有些可能不会显示的控件用懒加载写, 比如下拉刷新到的东西, 如果不下拉就不会显示

优点

  • 占用内存较小
  • 代码的可读性更强
  • 每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强

缺点

  • 代码量增加
  • 使用不得当,可能造成死循环

代码实现label的一个懒加载

- (UILabel *)label {
    if (!_label) {
        _label = [[UILabel alloc] init];
        _label.frame = CGRectMake(64, 64, 300, 50);
        _label.backgroundColor = [UIColor cyanColor];
        _label.text = @"懒加载就是当需要的时候才去加载";
        [self.view addSubview:_label];
    }
    return _label;
}

懒加载的注意点

使用懒加载时,必须注意getter方法嵌套,从而造成死循环,导致程序crash!, 比如,我们写成这样:

- (UILabel *)label {
    // 注意这里会造成程序奔溃,getter方法自身嵌套循环,永无休止
    if (!self.label) {
        _label = [[UILabel alloc] init];
        _label.frame = CGRectMake(64, 64, 300, 50);
        _label.backgroundColor = [UIColor cyanColor];
        _label.text = @"懒加载就是当需要的时候才去加载";
    }
    return _label;
}

有一种万无一失、永远也不会造成死循环的方法,那就是懒加载的方法名不要和懒加载内部的实例变量同名,这样Xcode就可以准确识别出你调用的是属性还是懒加载方法,比如:


#import "ViewController.h"

@interface ViewController ()
@property (nonatomic, strong) UILabel *label;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self lazyMethod];
}

- (UILabel *)lazyMethod {
    if (!self.label) {
        _label = [[UILabel alloc] init];
        _label.frame = CGRectMake(64, 64, 300, 50);
        _label.backgroundColor = [UIColor cyanColor];
        _label.text = @"懒加载就是当需要的时候才去加载";
        [self.view addSubview:_label];
    }
    return self.label;
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值