woshidan's loose leaf

ぼんやり勉強しています

1.5 UIViewController3 ライフサイクル

内容

  • life cycle
    • 生成
      • イニシャライザ
      • viewの読み込み完了時
    • 表示
      • viewが表示される直前
      • viewが表示完了した直後
    • レイアウトの調整
      • レイアウトの調整が済む直前
      • レイアウトの調整が済んだ直後
    • 破棄

life cycle

UIViewControllerのインスタンスは生成されてから破棄されるまでに、

生成、表示、レイアウト調整、非表示、破棄

といったいくつかの状態を遷移します。その一連の流れであるライフサイクルと状態遷移の際に呼ばれるメソッドについて確認します。

生成

イニシャライザ

UIViewControllerの生成方法はいくつかあります。

初期化のメソッド複数あるので、呼び出し方、呼び出され方を意識してイニシャライザを記述する必要があります。

メソッド 呼ばれるケース
- initWithCoder: 準拠しているNSCodingプロトコルメソッド. storyboardから生成される場合
- initWithNibName:bundle: UIViewControllerのレイアウトを記述したxibからViewControllerを生成する場合
- init NSObjectのイニシャライザ.UIViewControllerでこのメソッドを呼んだ場合、自動的に - initWithNibName:bundle: が呼ばれる

またイニシャライザが呼ばれた段階では、viewのインスタンスは生成されていないのでイニシャライザの中でviewの操作は出来ません。

viewの読み込み完了時

一回のみ- viewDidLoadが呼ばれます。viewDidLoadが呼ばれた段階ではviewのインスタンスが準備できているのでレイアウトや追加のコードを挿入することが出来ます。

表示

viewが表示される直前

  • viewWillAppear:が呼び出されます

viewが表示完了した直後

  • viewDidAppear:が呼び出されます

例えば、アニメーションを行ってViewControllerを表示する場合、viewWillAppear: → 表示アニメーション → viewDidAppear: の順に呼び出されます。

レイアウトの調整

viewが呼び出されてから、画面サイズに会わせてviewのサイズ調整をしたり、あるいは画面の回転のタイミングでレイアウトの調整が行われます。

レイアウトの調整が済む直前

  • viewWillLayoutSubviewsが呼び出されます。

レイアウトの調整が済んだ直後

  • viewDidLayoutSubviewsが呼び出されます。

破棄

オブジェクトが誰からも参照されなくなり、メモリから解放されるときに- deallocメソッドが呼ばれます。