Delegateに対する所見

Cocoa SDKで使われるDelegate自身は、特段難しい概念ではない。
親クラスのメソッドを、子クラスから使用する場合に、事前に子クラスのメンバ変数として親クラスのポインタ、もしくは親クラスへの参照を引き渡しておくのだ。
ここで、親クラスとは子クラスをインスタンティングしているクラスだ。
MFCをよく使っていたころは、実際よくやっていた、以下のような感じだ。


ParentClass::hugahuga()
{
...
m_pChildClass = new ChildClass;
m_pChildClass->m_pParentClass = this;
...
}
ParentClass::hogehoge()
{
...
}
としておいて、子クラスの方で

ChildClass::Aho()
{
...
if ( m_pParentClass != NULL ) m_pParentClass->hogehoge();
...
}
などという感じである。
Cocoa SDKでまんどくさいのは、@protocolに始まる宣言である。