web-dev-qa-db-ja.com

awakeFromNibはいつ呼び出されますか?

awakeFromNibは、viewControllerが割り当てられて初期化された直後に呼び出されますか?ビューコントローラーのawakeFromNibはどの時点で呼び出されますか?デバッグセッションから、[self.window makeKeyAndVisible]が実行されるまで、rootViewControllerのawakeFromNibが呼び出されないことがわかります。

30
Boon

awakeFromNibは、ビューとそのサブビューが割り当てられて初期化された後に呼び出されます。ビューにはすべてのアウトレットインスタンス変数が設定されていることが保証されています。

EDIT:イベントの詳細な再集計:

インスタンス化プロセス中に、アーカイブ内の各オブジェクトのアーカイブが解除され、そのタイプに適したメソッドで初期化されます。 Cocoaビュー(および関連するInterface Builderパレットを使用してカスタマイズできるカスタムビュー)は、initWithCoder:メソッドを使用して初期化されます。カスタムビューは、initWithFrame:メソッドを使用して初期化されます。 nibでインスタンス化されたカスタムクラスは、initメソッドを使用して初期化されます。

すべてのオブジェクトがアーカイブからインスタンス化および初期化されると、nib読み込みコードは、各オブジェクトのアウトレットと対応するターゲットオブジェクト間の接続を再確立しようとします。カスタムオブジェクトにアウトレットがある場合、NSNIbオブジェクトは、Interface Builderで作成した接続を再確立しようとします。まず、オブジェクト独自のメソッドを使用して接続を確立しようとします。接続が必要なアウトレットごとに、NSNibオブジェクトはオブジェクト内でsetOutletName:形式のメソッドを探します。そのメソッドが存在する場合、NSNibオブジェクトはそれを呼び出し、ターゲットオブジェクトをパラメーターとして渡します。その正確な名前でセッターメソッドを定義しなかった場合、NSNibオブジェクトは、対応するアウトレット名でインスタンス変数(タイプIBOutlet idの)をオブジェクトで検索し、その値を直接設定しようとします。正しい名前のインスタンス変数が見つからない場合、その接続の初期化は行われません。 最後に、すべてのオブジェクトが完全に初期化された後、それぞれがawakeFromNibメッセージを受信します。

ソース

EDIT 2:これは、ストーリーボードからロードされたビューコントローラーには適用されません。

43
whitelionV