前回の続き。
デリゲートって何
「荻原(2.0)本」の CHAPTER 14 にデリゲートの説明がある。要は下働きのためのオブジェクトってこと。
デリゲート機構を持つオブジェクトは何か特定のメッセージを受けたときに、もしデリゲートオブジェクトがセットされていれば、そいつに問い合わせたり、処理を任せたりする。このとき元のオブジェクトはセットされているデリゲートオブジェクトが送りたいメッセージを受け取れるかどうかを respondsToSelector:
などで調べる。受け取れるオブジェクトならメッセージを送る(つまり、問い合わせたり処理を任せたり)。
デリゲートになるオブジェクトは送られる可能性のあるメッセージすべてに対応する必要はない。対応したいメソッドだけを実装すれば良いことになっている。だから元のオブジェクトは事前に調べる必要があるわけだ。まあ、なんというかデリゲートになる方がエラそうなわけだ。やりたい仕事だけ受け付けます、と。
さて、ここで(前回の)非形式プロトコルが登場する。デリゲートになるオブジェクトは好きなメソッドだけ実装すれば良いという規約なので、通常のプロトコルではまずい。プロトコルを採用するというのはそこで宣言されたすべてのメソッドを実装するっていう意味だから。そのための "ugly" な方法(ヒレガス本より)が非形式プロトコルだったわけだ。Objective-C 2.0 以降はオプション付きプロトコルが導入されて、もう必要なくなった。
0 件のコメント:
コメントを投稿