lazy 修飾符和 lazy 方法

延時(shí)加載或者說(shuō)延時(shí)初始化時(shí)很常用的優(yōu)化方法。

在特定環(huán)境下才會(huì)使用到的存儲(chǔ)屬性,可以使用 lazy

class ClassA {

// 延時(shí)初始化

lazy var str: String = {

let str = "Hello"

print("只在首次訪問(wèn)時(shí)輸出")

return str

}()

// 如果不需要做什么額外的工作,可以簡(jiǎn)化成

lazy var str1: String = "hello1"

}

/*

lazy 可以結(jié)合? map/ filter 這類(lèi)閉包并進(jìn)行運(yùn)行的方法一起,讓這個(gè)行為變成延時(shí)進(jìn)行的,對(duì)性能也是有不小的提升

*/

// 直接使用 map

//let data = 1...3

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

//? ? print("正在處理:\(i)")

//? ? return i * 2

//}

//print("準(zhǔn)備訪問(wèn)結(jié)果")

//for i in result {

//? ? print("操作后結(jié)果為:\(i)")

//}

//print("操作完畢")

/*

輸出為:

正在處理:1

正在處理:2

正在處理:3

準(zhǔn)備訪問(wèn)結(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("準(zhǔn)備訪問(wèn)結(jié)果")

for i in result {

print("操作后結(jié)果為:\(i)")

}

print("操作完畢")

/*

輸出為:

準(zhǔn)備訪問(wèn)結(jié)果

正在處理:1

操作后結(jié)果為:2

正在處理:2

操作后結(jié)果為:4

正在處理:3

操作后結(jié)果為:6

操作完畢

*/

// 總結(jié): 對(duì)于那些不需要完全運(yùn)行,肯恩提前退出的情況,使用 lazy 來(lái)進(jìn)行性能優(yōu)化效果會(huì)非常有效

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容