10: 喬喬 escaping
weak self - A podcast by 一三、波肥
Categories:
本集竟然有人 escape!那我們就順勢來回應與 @escaping 有關的 #weakself挑戰賽吧!為什麼 Swift closure 的 [weak self] 要加中括號呢?weak、unowned 你分得清楚差別嗎?一起來參與挑戰吧。
{ 完整節目筆記請按我 }
weak self 挑戰賽
- 小綠的挑戰推文
- 何謂 escaping、nonescaping closure
- 何時用 weak、unowned,或是不用
Closure 的行為
- 搭配服用的程式範例
- closure 預設會 capture (strong reference) 外部變數
- capture list 會生成一份 copy
Escaping 和 Nonescaping
- function return 後還會發生的叫做 escaping
- 有機會造成 retain cycle
Weak 和 Unowned 的運作原理
- Swift 的 reference instance 是個 HeapObject
- HeapObject
- weak reference 會為 instance 建立 side table 用來計算數目
- Swift Ownership Manifesto
- Objective-C 的 ARC 功能如果不是因為創立全新語言 Swift 時追求 memory safety,恐怕從來不會出現。有興趣的朋友可以去聽 The Swift Community Podcast Ep.1。
何時用 weak 或是 unowned?
- closure 生命週期與對象生命周期一致時,使用 unowned
- weak 有較多記憶體消耗
- 要了解程式碼裡大家的生命周期啊
挑戰賽小結
- closure 會捕捉外部使用的變數,有可能造成 retain cycle
- weak 和 unowned 有不同的機制與生命週期
- 沒有 retain cycle 不用 weak / unowned
- weak 有額外的記憶體與性能消耗(可忽略)
工程師的 escape
13 最近在玩 Apple Arcade
- 13 的 Apple #ArcadeReview 連載中
- iPad mini 超適合玩 Apple Arcade 的,又輕又快又平💸
歡樂的時光總是過得特別快
更多 weak self
- 主講人 一三、波肥、喬喬
- 官網 https://weakself.dev
- Twitter @weak_self
- 提問箱