iOS學(xué)習(xí)筆記-defer關(guān)鍵字

1.概述

defer關(guān)鍵字是修飾一段函數(shù)內(nèi)任一段代碼,使其必須在函數(shù)中的其余代碼都執(zhí)行完畢,函數(shù)即將結(jié)束前調(diào)用??梢岳斫鉃閷⒀舆t執(zhí)行。

2.細(xì)解

2.1 代碼寫(xiě)一段
func testMethod_defer() {
  print("函數(shù)開(kāi)始");
  defer {
    print("defer_1");
  }
  defer {
    print("defer_2");
  }
  print("函數(shù)結(jié)束")
}
2.2 執(zhí)行結(jié)果

函數(shù)開(kāi)始
函數(shù)結(jié)束
defer_2
defer_1

2.3 分析結(jié)果

由打印結(jié)果可以發(fā)現(xiàn),兩個(gè)defer都執(zhí)行了,都在函數(shù)的最后執(zhí)行的。
defer_2先于defer_1執(zhí)行,說(shuō)明如果一個(gè)函數(shù)中如果包含多個(gè)defer的話,會(huì)按照自下而上的屬性去執(zhí)行defer。

3.進(jìn)階版,異步情況

3.1 代碼
func testMethod_deferAsync() {
  print("函數(shù)開(kāi)始");
  defer {
    print("defer_1");
  }
  DispatchQueue.main.asyncAfter(deadline: .now()+1) {
    print("異步執(zhí)行");
  }
  defer {
    print("defer_2");
  }
  print("函數(shù)結(jié)束")
}

3.2 執(zhí)行結(jié)果

函數(shù)開(kāi)始
函數(shù)結(jié)束
defer_2
defer_1
異步執(zhí)行

3.3 分析結(jié)果

由打印結(jié)果可以看到,異步代碼的執(zhí)行,不會(huì)影響到defer的執(zhí)行時(shí)間。
事實(shí)上,defer的執(zhí)行只和其所在的作用域有關(guān),如果作用域即將被回收,那么會(huì)在回收之前執(zhí)行defer。

?著作權(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)容