Swift 學習路線
從基礎原理到實務判斷,系統化理解Swift 學習路線。
LANGUAGE · 52 ARTICLES
從基礎原理到實務判斷,系統化理解Swift 與 Objective-C。
主題地圖
從基礎原理到實務判斷,系統化理解Swift 學習路線。
從基礎原理到實務判斷,系統化理解類型與記憶體。
從基礎原理到實務判斷,系統化理解Swift 並行處理。
從基礎原理到實務判斷,系統化理解Objective-C。
從這裡開始
從基礎通往下一步的導讀。
學習 Swift 時首先遇到的關卡就是 Optional。String? 的問號、if let、guard let、!、??。語法種類很多,如果分別背誦,很容易把規則記得一團亂。
閱讀文章在〈閉包〉一文中,我們介紹了如何透過 [weak self] 打破循環參照,但還留下了一個問題:除了 weak 之外還有 unowned,它們有什麼不同,又該在什麼時候使用?要回答這個問題,必須先深入了解 ARC 實際如何運作。
閱讀文章await 暫停的不是執行緒,而是函式。本文整理 suspension 的真正意義:函式將狀態儲存在堆積,並把執行緒歸還給協作式執行緒池,以及為什麼循序 await 不是平行執行。
閱讀文章所有文章
2019 年 Swift 5 與 iOS 12.2 發布後,App 容量縮小是 ABI 穩定性帶來的結果。本文整理 Swift 執行階段從每個 App 搭載移至 OS 的過程,以及模組穩定性與 @frozen 的取捨。
閱讀文章同步與非同步關注由誰處理工作完成,阻塞與非阻塞則關注是否立即交還控制權。由於兩個軸彼此獨立,因此 2×2 的四種組合都存在;本文搭配 Swift 範例說明原因。
閱讀文章檔案控制代碼或鎖這類只有唯一一份才有意義的資源,不應該被複製。本篇整理如何用 Swift 5.9 的 ~Copyable 將禁止複製刻進型別,以及 borrowing、consuming、inout 三種傳遞方式與適用時機。
閱讀文章Swift 5.9 的巨集是嵌入編譯器的程式碼產生外掛。本篇整理接收語法樹並回傳程式碼的原理、freestanding(#) 與 attached(@) 兩大類,以及自行建立時必須付出的成本。
閱讀文章struct 大小不是屬性大小的單純總和。本篇整理 size、stride、alignment、填充、利用 extra inhabitant 的 Optional,以及 64 位元 existential container 的實測結果。
閱讀文章方法呼叫會編譯為直接呼叫、vtable 或 objc_msgSend。本文整理 final 與 private 提升效能的機制、協定 extension 的陷阱,以及如何透過分析工具驗證。
閱讀文章KVO 在加入觀察者的瞬間,執行階段會將物件的類別動態替換成子類別。本文整理 isa-swizzling 的運作方式、class 為何會說謊,以及不經過 setter 就不會收到通知的條件。
閱讀文章結構化並行處理回答了誰要負責非同步工作的結束。本文整理子工作無法離開父層範圍的原理、取消訊號的傳播方式,以及使用 Task.detached 時必須手動補回的保證。
閱讀文章啟用 Swift 6 模式後,大量並行處理錯誤會湧現,而主角通常是 Sendable。本篇整理這個協定的意義:值能否跨越隔離邊界,以及依序採用值型別、不可變化、升級為 actor 的遷移處方。
閱讀文章類別無法新增 ivar,但可以透過 Associated Objects 綁定值。本文整理值儲存在物件旁邊的側表中的原理、類別屬性的完整實作,以及只需小心 assign 的記憶體策略。
閱讀文章Delegate 與 Closure 都能處理相同的回呼需求,但特性不同。本文以相同範例並列實作,整理出五項實際差異,以及依事件數量、關係存續時間與是否需要回傳值來選擇的判準。
閱讀文章actor 是能保護自身狀態的第四種型別。本篇整理如何將並行存取排隊,讓編譯器捕捉資料競爭,以及最知名的陷阱:再進入(reentrancy)。
閱讀文章