まず、ここでは、プレースホルダーはプロキシよりも優れた言葉です。
通常、NIB / XIBファイルにオブジェクトがある場合、NIBファイルをロードするとそのインスタンスが作成されることを意味します。プレースホルダーオブジェクトは、NIBファイルがロードされたときにすでに存在するオブジェクトであり、NIBの内部に表示されるため、NIBをロードすることによって作成されるオブジェクトと既存のオブジェクトを接続できます。
ファイルの所有者、ファーストレスポンダー、およびアプリケーションはすべてプレースホルダーです。
ファイルの所有者は、ペン先をロードするオブジェクトのプレースホルダーです。すべてのNIB読み込みメソッドは、「owner」パラメーターを取ります。ファイルの所有者と接続する場合、実行時にファイルが確立されると、nibloadingメソッドに渡される所有者オブジェクトに接続されます。多くのUIKitおよびAppKitクラスは、nibロードメソッドを呼び出します。NSApplication
、、、、およびすべてがあなたNSViewController
に代わってNIBファイルをロードします。彼らがそうするとき、彼らは所有者パラメータとして自分自身をnibloadingメソッドに渡します。そのため、ビューコントローラまたはウィンドウコントローラを使用する場合は、ファイルの所有者をサブクラスに設定し、ビューとファイルの所有者の間の接続を最大限に活用します。NSWindowController
UIApplication
UIViewController
NSApplication
インスタンスは、の単純なプレースホルダーです[NSApplication sharedApplication]
。これはグローバルシングルトンであり、InterfaceBuilderのアイコンはそのグローバルシングルトンを表しています。NSApplication
NIBファイルをロードしても、2番目のインスタンスは作成されません。対照的に、NIBファイルにウィンドウが含まれている場合、それを12回ロードすると、ウィンドウインスタンスは12個になりますが、インスタンスは1つになりNSApplication
ます。
ファーストレスポンダーはユニークです。アクションをファーストレスポンダーに接続するということは、アクションが実行されたときに、アクションがレスポンダーチェーンに動的に送信される必要があることを意味します。レスポンダーチェーンは通常、フォーカスされたビューから始まり、ビュー階層まで続き、いくつかのコントローラーとデリゲートが含まれます。チェーン内の各オブジェクトは、アクションの処理を開始します。メニュー項目はレスポンダーチェーンでうまく機能します。現在選択されているテキストを太字にする「太字にする」のメニュー項目がある場合は、それをに接続することから始めることができます。NSApplication
サブクラスですが、「太字にする」が適用されるすべての状況と、それらの処理方法を知っている必要があります。テキストビューと編集可能なWebビューは、「太字にする」を処理するためにおそらく異なるコードを必要とし、これをすべて1つのオブジェクトにまとめると、非常に複雑になり、あまり拡張できなくなります。代わりに、「太字にする」メニュー項目のアクションをmakeBold:
ファーストレスポンダーのアクションに接続することができます。これは、メニュー項目が選択されたときに、フォーカスされたオブジェクト、またはに応答したその親の1つがメッセージを受け取ることを意味しmakeBold:
ますmakeBold:
。これで、多くのクラスがメソッドを実装しmakeBold:
、フォーカスが合ったときにこのメニュー項目に応答できるようになりました。