Jul 092012
 

初期化に使われるイニシャライザー(initializer)のinitWithCoderとinitWithNibNameの違い。initからloadViewまでUIViewControllerの初期化から表示されるまでのそれぞれのメソッドの動作まとめ。nibを使う場合と使わない場合の違いを図解で解説。

iOS初期化メソッド(イニシャライザー)の図解

initWithNibName: bundle:

  • UIViewControllerのためのイニシャライザーである。
  • コードでUIViewControllerを作成する時に呼び出されるイニシャライザーである。
  • nibをロードできるようUIViewControllerを設定するイニシャライザーである。
このメソッドが呼ばれた時点では…
  • outletやactionは設定されていない状態
viewにアクセスするとnibをロードし、outletやactionの設定が開始される。

initWithCoder:

  • アーカイブオブジェクトのためのイニシャライザーである。
  • nibからオブジェクトをロードする時に呼び出されるイニシャライザーである。
  • nibの中に保存されたオブジェクトはアーカイブオブジェクトである。

このメソッドが呼ばれた時点では…

  • nibからオブジェクトが取り出されている(unarchive/deserialize)過程にある
  • outletやactionは設定されていない状態
  • UIViewControllerのcontextの中で、nibからUIViewControllerが生成される

initやユーザ定義の(initWith)イニシャライザー

  • nibを使わずコードのみでUIViewControllerを生成する場合に使う。

その他viewのライフサイクルで登場するメソッド

loadView

  • nibを使わない場合はオーバーライドする。
  • viewプロパティに指定するオブジェクトをここで生成する。
  • nibを使う場合はこのメソッドを利用しない。
- (void)loadView
{
    MyUIView *rootView = [[MyUIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.view = rootView;
}

viewDidLoad

  • viewが設定されている。
  • outletやactionの接続が設定されている。
  • nibを使う場合はnibが読み込まれた後に呼び出される。
  • nibを使わない場合はここでsubviewの設定をする。
  • (メモリの問題で)viewが解放されている場合、再度呼ばれる。

viewWillAppear

  • 画面の表示される直前に呼ばれる。
  • モーダル等のアニメが始まる前である。
  • (入れ替えの場合)他のUIViewControllerのviewWillDisappearが実行された後である。

viewDidAppear

  • 画面の表示が行われた直後に呼ばれる。
  • モーダル等のアニメが終わった後である。
  • 実際のframeサイズとなる。

コメント

個のコメント

Powered by Facebook Comments

 Posted by at 04:48

  3 Responses to “initWithCoderとinitWithNibNameの違い”

  1. initWithCoderとinitWithNibNameの違い http://t.co/jmgv3rJYND via @delicious

  2. initWithCoderとinitWithNibNameの違い http://t.co/w1hAGG76Vy

  3. 読む⇒initWithCoderとinitWithNibNameの違い http://t.co/MsuRK7nIND

Sorry, the comment form is closed at this time.