@escaping修飾block

Escaping Closure=(逃逸閉包)
如果一個(gè)閉包被作為一個(gè)參數(shù)傳遞給一個(gè)函數(shù), 并且在函數(shù)return之后才被喚起執(zhí)行, 那么這個(gè)閉包是逃逸閉包。

【其實(shí)用oc時(shí)代普通的block作為回調(diào)的函數(shù)就是這樣的,每個(gè)block都是希望可以逃避閉包,誰(shuí)希望馬上執(zhí)行呀】

是個(gè)假參數(shù),可以不傳,調(diào)用者后面跟一個(gè){...}

不逃逸閉包的生命周期:

  1. Pass a closure into a function
  2. The function runs the closure (or not)
  3. The function returns
  4. then this closure die.

逃逸閉包的生命周期

      1. 跟不逃逸一樣
  1. 最后的生命周期是closure不會(huì)因?yàn)閒unction返回而被kill掉;
需要使用 escaping closure的兩種case:
  1. 異步execution
    并不能說(shuō)函數(shù)return了就把closure kill掉, 因?yàn)檫@個(gè)closure可能還沒(méi)有執(zhí)行完畢
  2. 存儲(chǔ)
    如果任何全局變量都有一些些存儲(chǔ)存在, 那么這個(gè)closure也被逃逸掉

插曲

在 Swift 1 和 2中, closure by default 是 escaping的, 所以我們需要用 @noescape 來(lái)mark;
在 Swift 3中, closure by default是non-escaping, 我們需要用@escaping 來(lái)mark;

最后編輯于
?著作權(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)容