10: 喬喬 escaping
weak self - Un pódcast de 一三、波肥
   Categorías:
本集竟然有人 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
 - 提問箱
 
