デリゲート
デリゲートは簡単に言うと、あるオブジェクトが別のオブジェクトに処理を代行してもらう機構です。
既存のクラスに新しい機能を付け加えたり、情報を取得して利用するための柔軟性の高い仕組みとして便利に使うことができます。継承でも同様なことは実現できますが、柔軟性に欠け、1つのオブジェクトが複数のオブジェクトのデリゲートとして機能するようなことは実現できません。使い分けが必要となります。
デリゲートを用いるオブジェクトでは、そのクラスのプロパティとして
@property (...) id < ClassnameDelegate> delegate ;
としてデリゲートとなるオブジェクトを宣言し、
@protocol ClassnameDelegate
メソッド名 ;
@end
としてデリゲート先に送るためのプロトコルを定義します(既存のデリゲートプロトコルを用いるならば定義は不要です)。
メッセージは
[ delegate メソッド名 ] ;
のようにして送ることができます。
デリゲートとして機能させるオブジェクトでは、そのクラスのインターフェース部でデリゲートのプロトコルを採用することを宣言しなければなりません。複数クラスのデリゲートとして動作する時は、対応する複数のプロトコルを採用します。