2011-12-13 5 views
3

私がこの記事を見た:私は彼が言っているかわからないんだけどデリゲートはmvcコントローラに似ていますか?

http://www.cimgf.com/2008/10/01/cocoa-touch-tutorial-iphone-application-example/

「委任==コントローラ 言葉デリゲートとコントローラは同義的に使用することができます....」

をが、私はmvcがプログラミングの代理人よりも優れていると理解しています。

2つは似ていますか?

答えて

6

実際には異なるレベルにあります。

デリゲートを使用するクラスは、カスタム動作が、たとえばサブクラス化ではなく別のオブジェクトによって提供されるように設計されたクラス(任意のクラス)です。

ほとんどのCocoa Appsは、アプリの起動時に何かカスタムをしたいと思うでしょう。 NSApplicationのカスタムサブクラスを実装して–applicationWillFinishLaunching:をオーバーライドする代わりに、NSApplicationは有効なオブジェクトにdelegateプロパティを設定し、そのオブジェクトが–applicationWillFinishLaunching:メソッドを持つように設計されています。

あなたの設定で好きなクラスを使用することができますので、NSApplicationのサブクラスにする必要はありません。

多くのCocoaクラスはこのように動作します。つまり、カスタム動作を追加するためにサブクラス化する必要はほとんどありません。他の言語やフレームワークでは、カスタム動作を追加する方法は、サブクラス化することです。 Javaでカスタムボタンをしたいですか? JComponentを拡張してMouseListenerを実装し、mouseClickedなどをオーバーライドする新しいClassを作成するだけです。これはCocoaの方法ではありません。

コントローラーは、わかっているように、モデルとビューを調整するオブジェクトです。

モデルオブジェクトまたはビューオブジェクトのインスタンスにカスタムビヘイビアを追加する必要がある場合(たとえば、NSTableViewオブジェクトがあり、行が選択されたときにカスタムビヘイビアを追加するなど)、おそらく既にカスタムのControllerオブジェクトを持っており、これはしばしばコードを配置するのに最適な場所です。 TableView's.delegate =コントローラを設定するだけです。 hereテーブルビューにデリゲートメソッドがあります- tableViewSelectionDidChange: NSTableViewのサブクラスを作成する必要はありません。

私はこれがDelegateとControllerが全く同じことを意味するとは考えていません。

1

代表者は、イベントをキャッチするために実行されるバックグラウンドプロセスです。フレンドリーなMVCソフトウェアエンジニアリングのダイナミクスから、あなたがそれらを認識すると、コントローラになります。イベントとは、ボタンの押下画面のタッチシェイクなどです。デリゲートとは、Coccoaが使い分けて使用する単語のことです。これが欲しいと思っています

関連する問題