nibローディングインフラストラクチャは、nibアーカイブから再作成された各オブジェクトにawakeFromNibメッセージを送信しますが、アーカイブ内のすべてのオブジェクトがロードされて初期化された後にのみです。オブジェクトがawakeFromNibメッセージを受信すると、そのコンセントとアクション接続がすべて既に確立されていることが保証されます。
awakeFromNibのスーパーインプリメンテーションを呼び出して、親クラスに必要な追加の初期化を実行できるようにする必要があります。このメソッドのデフォルトの実装は何もしませんが、多くのUIKitクラスは空ではない実装を提供します。あなた自身のawakeFromNibメソッドの中でいつでもスーパーインプリメンテーションを呼び出すことができます。
インスタンス化プロセス中に、アーカイブ内の各オブジェクトはアーカイブされず、その型に適合するメソッドで初期化されます。NSCodingプロトコル(UIViewおよびUIViewControllerのすべてのサブクラスを含む)に準拠するオブジェクトは、initWithCoder:メソッドを使用して初期化されます。NSCodingプロトコルに準拠していないすべてのオブジェクトは、initメソッドを使用して初期化されます。すべてのオブジェクトがインスタンス化されて初期化された後、ニブローディングコードはそれらのオブジェクトすべてのコンセントとアクション接続を再確立します。次に、オブジェクトのawakeFromNibメソッドを呼び出します。nibローディングプロセス中のステップの詳細については、「リソースプログラミングガイド」の「Nibファイル」を参照してください。
通常、awakeFromNibは、設計時には実行できない追加のセットアップが必要なオブジェクト用に実装します。たとえば、この方法を使用して、ユーザー設定や他のコントロールの値と一致するコントロールの既定の設定をカスタマイズできます。また、個々のコントロールをアプリケーションの以前の状態に復元するために使用することもできます。
Interface Builderのテストモードでは、ロードされたInterface Builderプラグインからインスタンス化されたオブジェクトにもこのメッセージが送信されます。プラグインはオブジェクト定義コードを含むフレームワークとリンクするため、Interface BuilderはawakeFromNibメソッドを呼び出すことができます。Xcodeプロジェクト用に作成したカスタムオブジェクトの場合も同じです。Interface Builderは、これらのオブジェクトの定義されたアウトレットとアクションについてのみ認識します。実際のコードにアクセスすることはできません。
オブジェクトがアーカイブからインスタンス化される順序は保証されていないため、初期化メソッドはメッセージを階層内の他のオブジェクトに送信すべきではありません。他のオブジェクトへのメッセージは、awakeFromNibメソッドから安全に送信できます。