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