Lazyload 懒加载

懒加载

  1. 基本定义
    也称为延迟加载,当对象需要用到的时候再去加载。

  2. 用法
    其实就是所谓的重写对象的get方法,当系统或者开发者调用对象的get方法时,再去加载对象。

    需要注意:重写get方法时,先判断对象当前是否为空,为空的话再去实例化对象

  3. 优点

    • 不需要将创建对象的代码写到viewDidLoad,可以简化代码,增强代码的可读性
    • 对象的实例化在getter方法中,各司其职,降低耦合性
    • 当真正需要资源时,再去加载,系统的内存占用率会减小
  4. 例1

//声明一个变量
@property(nonatomic,strong) UILabel *vicLabel;
@implementation TestViewController
-(void)viewDidLoad
{
    [super viewDidLoad];
    [self change];
}

-(void)change
{
    // 使用self.vicLabel,其实是会先调用getter方法,因为用.property,其实就是getter方法。但是需要注意的是:在重写的getter方法里,切勿使用self.vicLabel,因为这种.的语法,会调用getter方法,这就造成了死循环。
    [self.vicLabel setText:@"我是vic"];
}

//重写getter方法
-(UILabel *)vicLabel{
    // 首先判断是否已经有了,若没有,则进行实例化,这是重点,必须要先判断
    if(!_vicLabel){
        _vicLabel = [UILabel alloc] initWithFrame:CGRectMake(20,30,200,50)];
        [_vicLabel setTextAlignment:NSTextAlignmentCenter];
        [self.view addSubview:_vicLabel];
    }
    return _vicLabel;
}

. 例2

@interface ViewController()
@property (nonatomic,strong) NSArray *shopData;
@end

@implementation ViewController
-(void)viewDidLoad
{
    [super viewDidLoad];
    _shopData = [NSArray arrayWithContentsOfFile:[NSBundle mainBundle] pathForResource:@"shop" ofType:@"plist"]];
}

@end
  • 显而易见,当控制器被加载完成以后,就会加载当前的shopData,假如shopData是在某些事件被触发的时候才会被调用,没必要在控制器加载完就去获取plist文件,如果事件不触发,代表着shopData永远不会被用到,这样在viewDidLoad中加载shopData就会十分多余,并且耗用内存

懒加载代码示例

@interface ViewController()
@property (nonatomic,strong) NSArray *shopData;
@end

@implementation ViewController

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

-(NSArray *) shopData
{
    if(_shopData){
        _shopData = [NSArray arrayWithContentOfFile:[NSBundle mainBundle] pathForResource:@"shop" ofType:@"plist"]];
    }
    return _shopData;
}
  • 当需要用到shopData的时候,就会调用self.shopData,即getter方法,然后再getter方法中获取plist文件内容,然后返回使用(注意,在getter方法中切勿使用self.shopData,因为self.shopData会调用getter方法,造成死循环)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值