二十四、Swift3.0之@escaping與@non-escaping區(qū)別(僅自己當(dāng)筆記使用)

@escaping:閉包的生命周期不在傳入的函數(shù)范圍內(nèi)管理,就是說這個(gè)閉包是被持有了。在函數(shù)return后,閉包并不會(huì)被銷毀,它被持有了。因?yàn)檫@個(gè)閉包要在異步請(qǐng)求回來后才執(zhí)行,這時(shí)候函數(shù)已經(jīng)return了,為了能執(zhí)行,必須被其他對(duì)象持有。如在網(wǎng)絡(luò)異步請(qǐng)求的時(shí)候,閉包一般是用@escaping修飾,因?yàn)榉庋b好的網(wǎng)絡(luò)請(qǐng)求,網(wǎng)絡(luò)請(qǐng)求成功后,閉包要在控制器中進(jìn)行回調(diào),所以要用@escaping修飾。

@non-escaping:閉包在函數(shù)內(nèi)執(zhí)行完后,函數(shù)才返回,閉包銷毀
總結(jié):看到函數(shù)的閉包參數(shù)被聲明為@escaping的時(shí)候,就要考慮self被循環(huán)引用的問題,要用unowned self或者weak self了;而如果是@non-escaping的話,就放心使用self吧,因?yàn)殚]包在函數(shù)內(nèi)執(zhí)行,會(huì)釋放被捕獲的self。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容