iOS 中的懒加载

懒加载简介

懒加载,顾名思义,就是不用它的时候不加载,换句话说,就是只有使用它的时候它才加载,故在某些情况下可以节省空间
所谓懒加载,就是推迟它的getter方法的执行。

self.showImageView和_showImageView的区别

  • self.showImageView为属性showImageView的点语法
  • _showImageView是属性附加生成的成员变量
  • 在没重写getter方法前两者是相同的,调用self.showImageView是下面这个方法
 - (UIImageView *)showImageView{
return _showImageview;
}

可见,self.showImageView就相当于_showImageview

  • 重写后self.showImageView返回懒加载后的对象,而直接调用_showImageview返回的是初始化的对象

viewDidLoad正常加载代码

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    _showImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"t2.jpg"]];
    _showImageView.frame = CGRectMake(50, 50, 100, 150);
    
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [self.view addSubview:_showImageView];
}

我们可以看出,showImageView在一开始需要显示界面时就已经加载好了,开始占用内存。但是showImageView只有在某些特定情况下才被使用(示例中是点击界面),那么如果事件不被触发,showImageView就不必加载去耗费内存

懒加载代码

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [self showImageView];
    [self.view addSubview:_showImageView];
}

- (UIImageView *)showImageView {
    if (!_showImageView) {
        _showImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"t2.jpg"]];
        _showImageView.frame = CGRectMake(50, 50, 100, 150);
    }
    return _showImageView;
}

可以看出,只有当需要用到showImageView的时候,调用showImageView的getter方法([self showImageView]),showImageView才被加载
注意:使用懒加载时getter方法里不能写成self.showImageView,否则会一直调用[self showImageView]方法,陷入死循环

猜你喜欢

转载自blog.csdn.net/streamery/article/details/102644049