应用场景
在使用变量过程中:
- 当在使用该变量时再初始化加载
- 在设置懒加载的时候,可以通过 self 设置类的属性、方法或者函数等。比如在类的普通初始化中,当类的初始化完成前,是无法使用它的属性、方法或者函数
核心逻辑/代码
可以被称之为懒加载的几个情况:
- 全局变量,默认为懒加载变量。在程序运行过程中,当用到这个变量时再进行加载。
- static 修饰的属性,默认为懒加载属性。当 static 修饰的变量时,这个变量是通过类名或者结构体名调用,而不是使用对象调用。类似于全局变量。
- 实例属性前 lazy 修饰时,也是懒加载属性变量,因为是在使用的时候再进行加载或者初始化设置属性变量,所以该实例属性不能用 let 修饰,需要用 var 修饰。
lazy 修饰的实例属性不是线程安全
采用 lazy var 形式的懒加载,无法保证线程安全。一旦某个线程对某一实例属性的懒加载过程未结束,而另一个线程同时又操作了该实例属性,那么会导致又一次加载属性,此时该属性便被初始化多次,已不再具有“懒”的特点了。— 《The Swift Programming Language》
示例代码
// 懒加载1:全局变量
var down1 = "ddd"
struct AA {
// 懒加载2:类属性
static let aa
// 懒加载3:实例属性
lazy var bb
}
网友评论