ファイルの所有者を使用せずにnibファイルからオブジェクトをロードできる場合、ファイルの所有者が存在する理由は何ですか?また、ファイルの所有者を使用せずにアウトレットアクション接続を作成できます。たとえば、オブジェクトからペン先に直接接続できます。ですから、ファイルの所有者の必要性を本当に理解することはできません。MVCパターンとは何か関係がありますか?ファイルの所有者はUIViewControllerタイプである必要がありますか?
1 に答える
nibファイルのロード中に、Cocoaはnibファイルでシリアル化された各オブジェクトを生成します。次に、nibファイル内の接続ごとsetValue:forKey:
に、ターゲットオブジェクトを呼び出して接続を作成します。一部の接続はオブジェクトへの接続nil
です。これらのsetValue:forKey:
メッセージは、ファイル所有者として渡されたオブジェクトに送信されます。
ファイルの所有者がいない場合、nil
接続は無視されます。接続がない場合はnil
、ファイル所有者がいないことと同じです。これは特に一般的ではありません。
これらすべてにより、異なるファイル所有者をロードプロセスに渡すことにより、同じnibファイルオブジェクトの複数のインスタンスをインスタンス化できます。
編集:
nibファイルはシリアル化されたオブジェクトの集まりにすぎないことを忘れないでください。を使用してプログラムでViewControllerを作成するとinitWithNibName:bundle:
、nibファイルがロードされる前にViewControllerがすでに存在します。nibファイル内のオブジェクトは、ほとんどの場合、そのViewControllerを参照できるようにする必要があります。UINib
そのため、ViewControllerをファイル所有者として渡します。nibファイルが言うところはどこでも、それをファイル所有者(通常はビューコントローラー)nil
にUINib
置き換えます。
これは非常に柔軟性がありますが、柔軟性は重要ではありません。ペン先のインスタンス化中にビューコントローラーを渡さなかった場合、ペン先ファイル内のビューコントローラーを参照する方法はありません。