lazy 修饰符和 lazy 方法

延时加载或者说延时初始化时很常用的优化方法。

在特定环境下才会使用到的存储属性,可以使用 lazy

class ClassA {

// 延时初始化

lazy var str: String = {

let str = "Hello"

print("只在首次访问时输出")

return str

}()

// 如果不需要做什么额外的工作,可以简化成

lazy var str1: String = "hello1"

}

/*

lazy 可以结合  map/ filter 这类闭包并进行运行的方法一起,让这个行为变成延时进行的,对性能也是有不小的提升

*/

// 直接使用 map

//let data = 1...3

//let result = data.map { (i) -> Int in

//    print("正在处理:\(i)")

//    return i * 2

//}

//print("准备访问结果")

//for i in result {

//    print("操作后结果为:\(i)")

//}

//print("操作完毕")

/*

输出为:

正在处理:1

正在处理:2

正在处理:3

准备访问结果

操作后结果为:2

操作后结果为:4

操作后结果为:6

操作完毕

*/

let data = 1...3

let result = data.lazy.map { (i) -> Int in

print("正在处理:\(i)")

return i * 2

}

print("准备访问结果")

for i in result {

print("操作后结果为:\(i)")

}

print("操作完毕")

/*

输出为:

准备访问结果

正在处理:1

操作后结果为:2

正在处理:2

操作后结果为:4

正在处理:3

操作后结果为:6

操作完毕

*/

// 总结: 对于那些不需要完全运行,肯恩提前退出的情况,使用 lazy 来进行性能优化效果会非常有效

你可能感兴趣的:(lazy 修饰符和 lazy 方法)