2011-02-06 12 views
1

Objective-Cのデリゲートは、オブジェクトのイベントリスナーでいっぱいのクラスとして定義されていますか?Objective-Cのデリゲートは、基本的にイベントリスナーでいっぱいのクラスですか?

+0

イベント'NSEvent'と' UIEvent'は、ユーザインタラクションイベントに特に使用されます - これはデリゲートによって処理される場合とされない場合があります – BoltClock

答えて

0

完全には正確ではありませんが、それはそれを考える方法の1つかもしれません。デリゲートは、指定されたオブジェクトのコールバックを処理します。これらはイベントかもしれないし、そうでないかもしれない。

+0

何らかの値を返す任意のメソッドですか? ? – Graham

+0

いいえtableViewデリゲートを取るviewControllerがtableViewを描画しているときに、描画するセルを知る必要があるため、tableView:cellForRowAtIndexPath:というコールバックメソッドでデリゲートをクエリし、指定された行のセル(indexPathの形式でメソッドに渡されます)。これを状態を返すように呼び出すこともできますが、より一般的に考えるべきです。コールバックメソッドは理論的には何かに責任があります。 – jakev

+1

デリゲートのように動作すると思って、 'tableView:cellForRowAtIndexPath:'は技術的にデリゲートではありません。これは 'UITableViewDataSource'プロトコルの一部です。デリゲートプロトコル*は典型的にすべてのオプションメソッドで構成されていますが、データソースプロトコルのようなものには必要なメソッドがいくつかあります。それは難しくて速いルールではなく、例外もあり、データソースはデリゲートのように機能します。 – bbum

6

代理人は、別のオブジェクトが動作のクエリやカスタマイズに使用できるオブジェクトに過ぎません。それ以上は何もない。関係するイベントハンドラはありません。これは、他のオブジェクト指向のUIキットでよく見られるサブクラス化の大きな混乱を避けるために使用されるパターンです。

たとえば、NSWindowをサブクラス化してサイズ変更のカスタム動作を提供する代わりに、クラスのいくつかのメソッドをどこかに実装し、そのクラスのインスタンスをデリゲートとして使用するだけです。このような実装は通常、コントロールレイヤーやモデルレイヤーの情報に依存するため、NSWindowのサブクラスではなくコントロールレイヤークラスをデリゲートとして使用し、コントロールレイヤーの機能を持つビューレイヤーオブジェクトを汚染しないようにしてください。

表紙の下に、代議員は死んでいます。サイズを変更すると、NSWindowはデリゲートに単に「windowWillResize:toSize:メソッドに応答しますか?」というメッセージを表示し、適切な時刻に呼び出します;それについてはまったくまったくobjc_msgSend()を超えてはいけません

関連する問題