デリゲートとは

デリゲートとは、本来他のクラスのメソッドを用いて処理すべき内容を自分のクラス内で処理できるように、他のクラスのメソッドを自分のクラス内で呼び出して利用することを言う。例えば、ボタンを押せば録音を行うというプログラムで、録音が終了した際にひと手間処理を入れたい場合、本来であれば録音を行うクラスの録音終了メソッド内で処理が行われるが、デリゲートを宣言することでViewController上でこの録音終了処理を行うことが出来る。つまり、本来他のクラスがやるべき仕事を委譲されて自分自身で処理できるようになる。

まず、

@interface MyViewController : UIViewController <AVAudioRecorderDelegate>
{

と書くとこのViewControllerでAVAudioRecorderを代行すると宣言したことになる。次に処理を代行する部分をプログラムに明示する。例えば、

// 録音を行うクラス
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:soundURL settings:nil error:&error];
// 各処理を記述
// self=MyViewControllerにrecorderのデリゲートをセットする
[recorder setDelegate:self];

と書くと、recorderが行う処理の一部をMyViewControllerが代行することが出来る。代行する部分の処理は、

- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag {
}

などの部分に記述する。各クラスはどのメソッドをデリゲートで使って良いか定義している。デリゲートしたクラスのうち使用出来るメソッドのみ処理を代行できる。