0Pricing
Swift Academy · レッスン

ARCが参照を数える仕組み

コンパイル時のARCの動作、retain/release呼び出し、オブジェクトのライフタイムを学びます。

「ARCが参照を数える仕組み」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

ようこそ

Automatic Reference Counting(ARC)は、クラスインスタンスのメモリを管理します。参照の数え方を理解すると、メモリリークのないコードを書けるようになります。

ARC の仕組み

ARC は、各クラスインスタンスを指す*強い*参照の数を追跡します。カウントが 0 になると、`deinit` を呼び出してメモリを自動的に解放します。

強い参照

```swift var a: Dog? = Dog(name: "Rex") // count = 1 var b = a // count = 2 a = nil // count = 1 b = nil // count = 0 → deinit ```

ARC はコンパイル時に動作する

ARC は、ガベージコレクターのように実行時に処理するのではなく、コンパイル時に retain/release 呼び出しを挿入します。これにより、次の特徴があります: • GC による一時停止がない • 解放のタイミングが決定的である • retain/release 呼び出しによるコードサイズのわずかな増加がある

強い参照サイクルの危険性

```swift class Node { var next: Node? } var n1: Node? = Node() var n2: Node? = Node() n1?.next = n2 n2?.next = n1 // cycle! n1 = nil; n2 = nil // both stuck at count=1 — leaked! ```

複数の変数でカウントする

```swift class Engine {} var car1: Engine? = Engine() // count = 1 var car2 = car1 // count = 2 var car3 = car2 // count = 3 car1 = nil // count = 2 car2 = nil // count = 1 // Engine still alive — car3 holds it car3 = nil // count = 0 → deinit ```

コレクション内の ARC

```swift var dogs: [Dog] = [] dogs.append(Dog(name:"A")) // count = 1 dogs.append(Dog(name:"B")) // count = 1 each dogs.removeAll() // both deinit called ```

ARC は値型には適用されない

構造体、列挙型、タプルは参照カウントされません: ```swift struct Point { var x, y: Double } // no retain/release var p1 = Point(x:1,y:2) var p2 = p1 // copy — no ARC ```

deinit で ARC を観察する

```swift class Cat { let name: String init(name: String) { self.name = name; print("\(name) born") } deinit { print("\(name) deallocated") } } var c: Cat? = Cat(name: "Luna") c = nil // "Luna deallocated" printed ```

ARC と GC のパフォーマンス比較

• GC: 定期的に実行を一時停止して回収するため、スループットとレイテンシのトレードオフがあります • ARC: カウントが 0 になるとすぐに解放するため、一時停止がありません • ARC のオーバーヘッド: 強い参照を介した代入ごとに、retain/release のペアが発生します

クイックチェック

ARC はいつ `deinit` を呼び出して、オブジェクトのメモリを解放しますか。

まとめ

重要なポイント: • ARC はクラスインスタンスへの強い参照を追跡します • カウントが 0 になると、`deinit` が呼び出され、メモリが解放されます • ARC はコンパイル時に動作するため、GC による一時停止がありません • 値型(struct/enum)は ARC によって管理されません • サイクルがあるとカウントは 0 になりません。weak/unowned を使ってください 次は、参照サイクルです。

よくある質問

「ARCが参照を数える仕組み」レッスンは無料ですか?

はい。「ARCが参照を数える仕組み」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「ARCが参照を数える仕組み」で何を学びますか?

コンパイル時のARCの動作、retain/release呼び出し、オブジェクトのライフタイムを学びます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「ARCが参照を数える仕組み」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ARCが参照を数える仕組み
  2. 保持サイクル:原因と検出
  3. weakとunownedの参照
  4. クロージャのキャプチャリストと[weak self]
← Swift Academyに戻る