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がリリースされた後、アプリ容量が減ったのはABI安定性のおかげです。各アプリが抱えていたSwiftランタイムがOSへ移った経緯と、モジュール安定性、@frozenのトレードオフを整理します。
記事を読む同期・非同期は処理の完了を誰が管理するか、ブロッキング・ノンブロッキングは制御権をすぐ返すかという軸です。2つの軸は独立しているため、4つの組み合わせがすべて存在します。その理由をSwiftの例とともに整理します。
記事を読むファイルハンドルやロックのように一つでこそ意味を持つリソースは、コピーすべきではありません。Swift 5.9の~Copyableでコピー禁止を型に刻む方法と、borrowing・consuming・inoutの3つの受け渡し方、使いどころを整理します。
記事を読むSwift 5.9のマクロは、コンパイラに組み込まれるコード生成プラグインです。構文木を受け取ってコードを返す仕組み、freestanding(#)とattached(@)の2種類、自作時のコストをまとめます。
記事を読むstructのサイズはプロパティサイズの単純な合計ではありません。size・stride・alignment、パディング、extra inhabitantを利用するOptional、64ビットのexistential containerを実測します。
記事を読むメソッド呼び出しは、直接呼び出し・vtable・objc_msgSendの3方式にコンパイルされます。finalとprivateが性能に関わる仕組み、プロトコルextensionの落とし穴、プロファイラでの確認方法をまとめました。
記事を読むオブザーバーを登録した瞬間、ランタイムはオブジェクトのクラスを動的サブクラスに差し替えます。isa-swizzlingの動作、classが嘘をつく理由、setterを経由しないと通知されない条件を整理します。
記事を読む構造化並行処理は、非同期処理の終了を誰が担保するのかに答えます。子タスクが親スコープから抜けられない仕組み、キャンセルシグナルの伝播、Task.detachedで手動管理が必要になる保証を整理します。
記事を読むSwift 6モードを有効にすると、Sendableを中心に並行処理エラーが大量に現れます。本稿では、値が隔離境界を越えてよいかというこのプロトコルの意味と、struct化・不変化・actorへの昇格という移行手順を整理します。
記事を読むカテゴリにはivarを追加できませんが、Associated Objectsで値を関連付けられます。オブジェクト横のサイドテーブルに保存される仕組み、カテゴリプロパティの実装、assignで注意すべきメモリポリシーをまとめます。
記事を読むデリゲートとクロージャは同じコールバック要件に対応しますが、性質は異なります。同じ例を並べて実装し、実用上の5つの違いと、イベント数・関係の寿命・戻り値の要否で選ぶ基準を整理します。
記事を読むactorは自分の状態を自ら守る4番目の型です。並行アクセスを順番待ちにし、データ競合をコンパイラが検出できる問題へ変える仕組みと、代表的な落とし穴である再入性(reentrancy)まで整理します。
記事を読む