延時加載或者說延時初始化時很常用的優(yōu)化方法信殊。
在特定環(huán)境下才會使用到的存儲屬性朋其,可以使用 lazy
class ClassA {
// 延時初始化
lazy var str: String = {
let str = "Hello"
print("只在首次訪問時輸出")
return str
}()
// 如果不需要做什么額外的工作撤缴,可以簡化成
lazy var str1: String = "hello1"
}
/*
lazy 可以結(jié)合? map/ filter 這類閉包并進行運行的方法一起雀鹃,讓這個行為變成延時進行的诫睬,對性能也是有不小的提升
*/
// 直接使用 map
//let data = 1...3
//let result = data.map { (i) -> Int in
//? ? print("正在處理:\(i)")
//? ? return i * 2
//}
//print("準備訪問結(jié)果")
//for i in result {
//? ? print("操作后結(jié)果為:\(i)")
//}
//print("操作完畢")
/*
輸出為:
正在處理:1
正在處理:2
正在處理:3
準備訪問結(jié)果
操作后結(jié)果為:2
操作后結(jié)果為:4
操作后結(jié)果為:6
操作完畢
*/
let data = 1...3
let result = data.lazy.map { (i) -> Int in
print("正在處理:\(i)")
return i * 2
}
print("準備訪問結(jié)果")
for i in result {
print("操作后結(jié)果為:\(i)")
}
print("操作完畢")
/*
輸出為:
準備訪問結(jié)果
正在處理:1
操作后結(jié)果為:2
正在處理:2
操作后結(jié)果為:4
正在處理:3
操作后結(jié)果為:6
操作完畢
*/
// 總結(jié): 對于那些不需要完全運行舷暮,肯恩提前退出的情況蟋座,使用 lazy 來進行性能優(yōu)化效果會非常有效