代表

2011-05-10 3 views
1

可能性の重複:
How does a delegate work in objective-C?代表

こんにちはコミュニティ、

私はObjective-Cの中デリゲートの概念を理解しようとしています。私はドキュメントをフォローアップしようとしましたが、デリゲート間でメッセージを送信する方法について慣れ親しんで、カスタムデリゲートを作成したい場合、どうすればよいでしょうか?

誰かが私にこの概念をよりよく理解させてくれることを願っています。

おかげで、

ショーン

答えて

1

は、代表者の基本的な考え方は、他のオブジェクトのインスタンスにデリゲート重要な意思決定や情報にあります。

ほとんどのフレームワークでは、アプリケーションフローにフックするためにサブクラス化とオーバーライドメソッドを使用します。それは動作しますが、欠点は、たとえば、多くのです:

  • あなたは完全に新しいサブクラスなし意思決定者を変更することはできません。
  • 複数の継承がない場合、1つのオブジェクト(自分自身)に対してのみ意思決定を行うことができます。

オブジェクトがデリゲートを呼び出す可能性がある理由は4つあり、これらの4つのそれぞれはデリゲートメソッド名のキーワードを使用してこれを通知します。それは命名規則だけですが、良い市民になりたい場合はパターンに従ってください。

  • 何か問題が発生するかどうか尋ねます。例:gestureRecognizer:shouldReceiveTouch:
  • やむを得ない事が起こる前に。たとえば、applicationWillTerminate:です。
  • 何かが発生した後。たとえば:accelerometer:didAccelerate:
  • し、データを取得するには、これは、デリゲートよりもデータソースであるが、二つの間の線はあいまいです。名前には定義された名前は含まれませんが、要求された名前のデータが含まれている必要があります。たとえば、次のようにtableView:targetIndexPath一般的なルールとしてForMoveFromRowAtIndexPath:toProposedIndexPath:

委任を要求して、指定されたオブジェクトのインスタンスである必要があり任意のデリゲートメソッドの最初の引数。

+0

PeyloW、あなたが提供した4つの理由は、これらが唯一の理由ではない理由は、代理人は右の呼び出しが必要ですか?たぶん、私が主張する主な理由があるでしょう。同様に、「BackGround」に行くときに代理人を呼び出すことはできません。また、デリゲートを介して何かが行われた後、簡単にNSLogメソッドを使って更新を取得する簡単な例はありますか? –

+0

バックグラウンドのために '' Foo'を*バックグラウンドにすることができれば、 '' shouldFooEnterBackground: ''、 '' fooWillEnterBackground: ''、 '' fooDidEnterBackground: ''、および/または 'tokenForEnteringBackgroundWithFoo:' AppleはPhotoPickerという名前のサンプルアプリケーションを用意しています。これは、両方ともUIKitのデリゲートを使用し、両方のデリゲートを定義/使用します(http://developer.apple.com/library/)。 ios /#samplecode/PhotoPicker / – PeyloW