0Pricing
Swift Academy · レッスン

デイニシャライザとメモリのライフサイクル

オブジェクトが解放される前に、deinitでリソースをクリーンアップします。

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

ようこそ

Swiftのクラスでは、インスタンスが解放される直前に実行される`deinit`を定義できます。init → 使用 → deinitというオブジェクトのライフサイクル全体を理解することは、リソース管理の鍵となります。

deinitとは

```swift class FileHandle { let path: String init(path: String) { self.path = path; print("Opened \(path)") } deinit { print("Closed \(path)") } } do { let f = FileHandle(path: "/tmp/log.txt") } // deinit called here when f goes out of scope ```

deinitの構文規則

• クラスでのみ使用できます。構造体と列挙型には`deinit`がありません • パラメーターや戻り値はありません • 括弧は付けません:`deinit { }`であり、`deinit() { }`ではありません • ARCによって自動的に呼び出されます。自分で呼び出してはいけません • サブクラスの`deinit`の後に、スーパークラスの`deinit`が自動的に呼び出されます

クリーンアップの使用例

`deinit`の一般的な用途: • ネットワーク接続を閉じる • 通知オブザーバーを削除する:`NotificationCenter.default.removeObserver(self)` • タイマーを無効化する • ファイルハンドルやデータベース接続を閉じる

参照カウントとライフサイクル

ARCは、オブジェクトを指すstrong参照の数を追跡します: ```swift var a: Dog? = Dog() // retain count = 1 var b = a // retain count = 2 a = nil // retain count = 1 b = nil // retain count = 0 → deinit called ```

サブクラスのdeinitチェーン

```swift class Base { deinit { print("Base deinit") } } class Child: Base { deinit { print("Child deinit") } // super.deinit called automatically after } var c: Child? = Child() c = nil // prints: Child deinit, then Base deinit ```

weakによる保持の防止

```swift class Owner { var pet: Dog? deinit { print("Owner gone") } } class Dog { weak var owner: Owner? // weak = no strong retain deinit { print("Dog gone") } } ``` `owner`をnilに設定すると、`Dog`が参照を保持していても`Owner`を解放できます。

循環参照によってdeinitが実行されない

```swift class A { var b: B? } class B { var a: A? } var a: A? = A() var b: B? = B() a?.b = b b?.a = a a = nil b = nil // deinit never called — retain cycle! ```

タイマーを無効化するパターン

```swift class PollingService { var timer: Timer? func start() { timer = Timer.scheduledTimer(...) } deinit { timer?.invalidate() timer = nil print("Timer stopped") } } ```

Instrumentsによるリーク検出

`deinit`が呼び出されない場合、循環参照が発生している可能性があります。Xcode Instrumentsの→Leaksテンプレートを使って、確保されたまま解放されていないオブジェクトを検出してください。

理解度チェック

`deinit`を定義できるのはどの型ですか?

まとめ

重要なポイント: • `deinit { }` — 解放前にリソースをクリーンアップします • クラスでのみ使用でき、サブクラスの後にスーパークラスのdeinitが自動的に呼び出されます • ARCがdeinitを実行するタイミングを決定します(参照カウントが0になったとき) • 循環参照はdeinitの実行を妨げます。`weak`または`unowned`で解消します • InstrumentsのLeaksを使って、deinitが実行されないオブジェクトを見つけます コース完了です!次は、列挙型のパターンとステートマシンについて学びます。

よくある質問

「デイニシャライザとメモリのライフサイクル」レッスンは無料ですか?

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

「デイニシャライザとメモリのライフサイクル」で何を学びますか?

オブジェクトが解放される前に、deinitでリソースをクリーンアップします。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「デイニシャライザとメモリのライフサイクル」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. クラス継承とsuperキーワード
  2. override、finalとサブクラス化の防止
  3. 型キャスト:is、as?、as!、as
  4. デイニシャライザとメモリのライフサイクル
← Swift Academyに戻る