iOS--懒加载(延迟加载)

懒加载

相关概念

为了减小内存消耗,在程序启动时不一次性加载所有的资源,而是在需要一些资源的时候再去加载。(效率低,内存小)
懒加载也称延迟加载,实际上就是对getter方法的重写
懒加载使用时,属性必须用strong修饰
strong会使修饰对象的引用计数加一,而weak不会。如果一个对象的引用计数为0是系统会自动销毁它。如果想让一个控件的生命周期随着控制器的小会才去释放,那就使用strong,如果仅仅是想让它在被移除视图之后就被销毁,可以使用weak。

使用步骤

在.h文件中设置一个label属性

#import <UIKit/UIKit.h>

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

@end

在.m文件中重写getter方法并调用getter方法

- (void)viewDidLoad {
    [super viewDidLoad];
    [self Label];
    // Do any additional setup after loading the view.
}
- (UILabel *)Label {
    if (!_label) {
        _label = [[UILabel alloc] init];
        _label.text = @"iOS";
        _label.frame = CGRectMake((self.view.frame.size.width)/2-100, (self.view.frame.size.height)/2-100, 100, 100);
        [self.view addSubview:_label];
    }
    return _label;
}

==在重写方法里的_label不要写成self.label。必须完全按照上边的格式,如果将任意一个_label换成self.label,就相当于调用这个歌方法,在外部调用的时候就形成无限循环

优点

  • 只有党真正需要资源时,再去记载,节省内存资源
  • 不必将代码全部写在viewDidLoad方法中,提高代码可读性
  • 防止了实例为nil的情况。

缺点

  • 增加代码量
  • 容易造成循环引用,导致程序崩溃。

注意

if (!_label)可以写成if (_label = = nil),不可以写成 if (self.label == nil)。会造成循环引用。
_label为成员变量,是由属性附加生成的成员变量。而self.label为调用属性label的点语法。在没有重写之前两个返回的值相同。
重写getter方法时,西安判断对象当前是否为空,为空的话再去实例化对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山河丘壑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值