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 来进行性能优化效果会非常有效

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容