{ 完整節目筆記 https://weakself.dev/episodes/10 }
本集竟然有人 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
weak reference 會為 instance 建立 side table 用來計算數目
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
Twitter @weak_self
Share this post