非形式プロトコルって何?

プロトコルって何?」の続きで、非公式プロトコルって何?です。

「詳解 Objective-C 2.0」の「11-03 非形式プロトコル」を読んでみると、非形式プロトコルは @protocol ではなくて NSObject のカテゴリとして宣言する、カテゴリなのでコンパイル時に適合しているかどうかはチェックされない、とのこと。デリゲート(デリゲートって何?をやらないと)で使われることが多いそうですが、何のメリットがあるのかさっぱりわがんね。

というわけで、「非形式プロトコル – もう1つのプロトコル」と「2つのプロトコルの使い分け」を読んでみました。なるほど、デリゲートで呼び出されるメソッドは数は多いけど実際に全てを使わないといけいないことはそれほどなく、プロトコルで宣言してしまうとそれらを実装する必要が出てきてしまう(といっても警告出るだけだと思いますが)、なので非形式プロトコルにして空の実装がたくさんできてしまうようなことは避けましょう、と。うおー!とはならないですが、そんなもんなんですね。

2つのプロトコルの使い分け」の最後にあるように、

  • すべてのメソッドを実装する必要があり、インスタンス化をする前にチェックを行いたい場合は、形式プロトコル
  • 任意のメソッドだけ実装すればよくて、すでにインスタンス化されたオブジェクトを指定する場合は、非形式プロトコル
って覚えます。

うーんソースが書けんかった。


About this entry