Objective-Cの デリゲート (delegate)

http://www.lifeaether.com/overtaker/blog/?page_id=1554
デリゲート


うーん。すぐに忘れてしまいます。
メッセージの応答を、別のオブジェクトに委譲するという感じでしょうか?

とても便利なデリゲートの仕組みですが、実は言語上の機能としてデリゲートが実装されているわけではありません。したがって、自分でデリゲートを利用したインスタンスを作成するには、自分でデリゲートと同じ動きをするようにクラスを作成しなければなりません。
デリゲートの保持

一般に、デリゲートは delegate プロパティとして宣言されます。注意すべきは、 delegate プロパティは例外的に assign で宣言することです。デリゲートを保持してしまうと、ほとんどの場合循環参照が起こるので、 retain を使って保持してはいけません。

@property (assign) id delegate;

デリゲートメソッドの実装

特定のメソッドをデリゲートメソッドにするには、自分でメッセージ転送を行うコードを書く必要があります。典型的には、次のコードを書きます。

- (id)delegateMethod:(id)anObject
{
  if ( [delegate respondsToSelector:@selector(delegateMethod:)] ) {
	return [delegate delegateMethod:anObject];
   }

	// デフォルトの動作
}


たとえば、何かのオブジェクトを利用するとして、何かの通知が帰ってくる場合、それを受け付けるということができます。


そのオブジェクトを生成後 obj.delegate =self すると、objを生成した側に、通知がメッセージで帰ってきます。

objを生成した側は、そのメッセージを実装してもいいし、実装しなくてもいいです。