UIViewControllerはなにをoverrideすればいいのか
UIViewControllerでViewの読み込みを,サンプルごとにコンストラクタ,LoadView(),またはViewDidLoad()を使うものがあり混乱しています.UIViewControllerのViewの扱いフローをまとめてみます.
Appleのドキュメント, View Controller Programming Guide for iPhoneOS の44ページあたりに書いてあります.
UIViewControllerのViewの扱いは次の3つがあります:
- Load
- Appear
- Disappear
LoadはNIBファイルもしくは実行コードからのViewの読み込み,Appearはビューの描画およびアニメーション,DisappearはViewの非表示および解放です.それぞれの処理について開始/終了時に呼び出されるメソッドがあり:
- Viewの読み込み
- public virtual void LoadView();
- public virtual void ViewDidLoad();
- Viewの表示およびアニメーション
- public virtual void ViewWillAppear(bool animated);
- public virtual void ViewDidAppear(bool animated);
- Viewの非表示
- public virtual void ViewWillDisappear(bool animated);
- public virtual void ViewDidDisappear(bool animated);
- Viewの解放
- public virtual void ViewDidUnload();
となります(たぶん).
冒頭のViewをどこで初期化するのが正しいかという疑問ですが,LoadView()でViewのインスタンス作成と追加を行うのが正しそう.Viewを設置したあとのレイアウト調整などはViewDidLoad()で行うのでしょう.
しかしNIBファイルを使わず全てコードで書くならば,ViewがロードされないうちにControllerが破棄されたりしない限りは,コンストラクタでViewをロードしても実行結果は同じでしょう.ただし,実行結果が同じだからといって任意の場所に処理コードを書いてしまうと,どこで処理しているのか分かりにくくなり可読性が落ちます.開発グループで基準(もしくはテンプレート)を決めておくほうがよさそうです.