複数のクラスを作るとき、各クラスが必ず実装しなければならないメソッドがある場合にプロトコルを使用します。プロトコルを使用しなくても各クラスにメソッドを実装すればよいのですが、プロトコルを使用すればメソッドを実装していない時に警告が出るという点で「実装を義務付ける」ことができます。
(他のプログラム言語ではインターフェースと呼ばれているものと同等です)
§1 単純なプロトコルの実装例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@protocol Style //プロトコル名 - (void) draw; //drawメソッドを必須とする @end @interface circle:NSObject <Style> {} //Styleプロトコルを採用 @end @implementation circle - (void) draw{printf("○");} //drawメソッドを実装 @end @interface rectangle:NSObject <Style> {}//Styleプロトコルを採用 @end @implementation rectangle - (void) draw{printf("□"); } //drawメソッドを実装 @end |
プロトコルは「@protocol」というコンパイラディレクティブを使って定義します。上記では、「Style」というプロトコルを定義して、drawメソッドの実装を義務付けています。
Styleをスーパークラスとして継承する方法でも同じような仕組みを実現できます。クラスの結びつきが強くて共通の処理が多い場合は継承、一部メソッドなどの構成を統一したい場合はプロトコルを使うと良いと思います。