懒加载,其实就是延时加载。它将对象的创建延迟到了需要对象的时候,这样就减少了内存开销,但是会降低效率。
Objective-C 的懒加载实现
其实,对于 OC 来说。懒加载就是利用 @property 的特性,为属性生成 get 和 set 方法,懒加载就是调用它的 get 方法。如果不重写它的 get 方法的话,它会报错,原因是调用如下方法,会返回空指针。
- (NSArray *)dataArray{ return _dataArray}
所以,我们按如下方式来重写我们的 get 方法。
@property (nonatomic,strong)NSMutableArray *messages;
- (NSMutableArray *)messages
{
if (_messagess ==nil) {
self.messages = [NSMutableArrayarray];
}
return_messages;
}
这样,就防止了成员属性为没有赋值的情况。
Swift 懒加载的实现及原理
Swift 懒加载就是一段闭包代码块,只会执行一次。
在 Swift 存储的属性必须初始化,确认类型,或者使用可选类型。因此,我们需要使用 var 和 lazy 关键字。
lazy 属性:lazy 属性的代码块只会调用一次, lazy 修饰的是一个存储类型。
必须使用 var ,而不使用 let 定义延时加载的原因是: 因为 let 关键字定义的是常量,而常量必须在实例创建时赋值。
// Swift 实现懒加载
lazy var box : UIView = {
() -> UIView in
let view = UIView()
return view
}()
根据上面的 demo ,我们可以总结出 Swift 定义懒加载的规则,即后面通过等号赋值一个闭包,闭包后面必须加上()。