2012年1月27日金曜日

プロトコルを理解する1

objective-Cにはプロトコルという概念があります。プロトコルは、オブジェクトの役割や振る舞いをあらわすメソッドの集合のことです。
ちなみに、java言語におけるインターフェースという概念は、objective-Cのプロトコルを取り入れています。

プロトコルは、メソッド宣言の集合であり、実現方法は各クラスに任されます。
プロトコルは以下のように宣言します。

    @protocol プロトコル名
    メソッド宣言;
    @end

xcodeでプロトコルファイルを作成する場合は、
追加→新規ファイル→objective-Cprotocol→ファイル名入力
といった手順になります。

プロトコルファイルは通常ヘッダファイルとして記述します。利用する場合は、必要とするクラス宣言でインポートします。
プロトコルの利用はインターフェースで以下のように宣言します。

    @interface クラス名 : スーパークラス名 <プロトコル名> {
      インスタンス変数;
    }
    メソッドの宣言:
    @end

プロトコルの宣言をした場合、インターフェースで宣言したメソッドと同様に、実装部で実装する必要があります。
又、プロトコルは複数指定することも可能です。インターフェースの<>内で【,】で区切って複数のプロトコル名を記述します。

    @interface クラス名 : スーパークラス名 <プロトコル名1, プロトコル名2> {
      インスタンス変数;
    }
    メソッドの宣言:
    @end

プロトコルは継承も可能です。以下のように宣言します。

    @protocol プロトコル名 <プロトコル名2>
    メソッド宣言;
    @end

プロトコルの意義は、プロトコルを採用したクラスがどういう機能に対応しているかを明確にすることです。クラスがどのプロトコルを採用しているかを知るには、Class ReferenceのConforms toグループで確認できます。
例えば、NSStringクラスならば、

  • NSCoding
  • NSCopying
  • NSMutableCopying
  • NSObject (NSObject)
のプロトコルに対応していることになります。。

0 コメント:

コメントを投稿