闡述
一句話概括: defer包裹的代碼會在函數return之前執行。
(無論函數是從哪個分支return, 或 throw, 或自然執行到最後一行)
認知
1 使用場景
1-1 do-catch 結構
a defer在do-catch結構中的do代碼塊中,defer會在do代碼塊執行完就執行defer代碼
b defer在do-catch結構中的do代碼塊外,defer會在函數代碼塊執行完執行defer代碼
1-2 清理工作,回收資源
a 關閉文件
b dealloc 手動分配的空間需要釋放
c 鎖的解開
1-3 completion block
a 函數block的回調
b 函數block的置空
1-4 調用super方法
2 細節
2-1 任意scope都可以有defer
2-2 必須執行到defer代碼行,defer纔會生效
2-3 多個defer 執行順序,棧結構