【iOS】懒加载

懒加载概念

懒加载-也称延迟加载,即在需要的时候才加载。

因为iOS设备的内存有限,如果一次就把所有将来可能用到的资源全部加载,会耗费大量内存。所以我们在程序启动时不加载资源,只有在运行到需要一些资源的时候,再去加载这些资源(其实是对getter方法重写)。其次,我们加载资源时一定要注意先判断是否已有了,如果没有那么再去进行实例化。

好处

  1. 不必将创建代码全部写在viewDidLoad方法中,增强可读性
  2. 每个控件的getter方法中分别负责各自的实例化处理,松耦合
  3. 节省内存资源

代码示例

这是添加一个背景的案例,先定义属性。

需要使用strong修饰,因为strong会使修饰对象的引用计数加一。如果使用weak的话,在创建对象后不立即引用,该对象可能会因为引用计数归0被销毁,导致返回空值。

@property (nonatomic, strong) UIImageView* backgrandView;

我们通过重写getter方法,完成懒加载(lazy loading)模式。对于此时的_backgrandView属性,如果不被调用就是一个空值,被调用就会实例化。

// 重写getter方法
- (UIView*) backgrandView {
    // 判断该视图是否已经存在,若没有,则实例化
    if (_backgrandView == nil) {
        _backgrandView = [[UIImageView alloc] init];
        _backgrandView.frame = self.view.bounds;
        
        // 添加img图片
        UIImage* backgrandImage = [UIImage imageNamed:@"backgrand.jpeg"];
        [_backgrandView setImage:backgrandImage];
        
        [self.view addSubview:_backgrandView];
    }
    return _backgrandView;
}

如果我们将上列代码的任一_backgrandView替换成self.backgrandView,就会造成死循环。因为self.backgrandView的本质就是调用该属性的getter方法,在这里就会重复调用getter方法陷入死循环。

你可能感兴趣的:(ios,xcode,objective-c)