非逃逸閉包
非逃逸閉包的生命周期:
- 把閉包作為參數(shù)傳遞給函數(shù)钓瞭。
- 函數(shù)中運(yùn)行該閉包浊竟。
- 退出函數(shù)怨喘。
非逃逸閉包被限制在函數(shù)內(nèi),當(dāng)函數(shù)退出時(shí)振定,該閉包的引用計(jì)數(shù)不會(huì)增加必怜,也就是說其引用計(jì)數(shù)在進(jìn)入函數(shù)和退出函數(shù)時(shí)保持不變。
逃逸閉包
當(dāng)一個(gè)閉包作為參數(shù)傳到一個(gè)函數(shù)中后频,但是這個(gè)閉包在函數(shù)返回之后才被執(zhí)行梳庆,我們稱該閉包從函數(shù)中逃逸。
逃逸閉包生命周期長于相關(guān)函數(shù)卑惜,當(dāng)函數(shù)退出時(shí)膏执,逃逸閉包的引用仍然被其他對象持有,不會(huì)再相關(guān)函數(shù)結(jié)束后釋放露久。
閉包參數(shù)默認(rèn)是非逃逸類型更米。如果需要其逃逸類型的閉包,可以使用關(guān)鍵字@escaping
逃逸閉包使用場景
- 異步調(diào)用:如果需要調(diào)度隊(duì)列中異步調(diào)用閉包毫痕,這個(gè)隊(duì)列會(huì)持有閉包的引用壳快,至于什么時(shí)候調(diào)用閉包,或者閉包什么時(shí)候運(yùn)行結(jié)束都是不可預(yù)知的镇草。
- 存儲(chǔ):需要存儲(chǔ)閉包作為屬性,全局變量或者其他類型做稍后使用瘤旨。