プロトコル
プロトコルは、クラスが実装することを選択するプログラムのインターフェイスを宣言します。プロトコルにより、遠縁継承によって関連する2つのクラスは、特定の目標を達成するために互いに通信する事ができる。それらは、このようにしてサブクラス化の代替を提供します。他のクラスに便利な動作を提供することができる全てのクラスは、匿名でその動作を販売するためのプログラムインターフェイスを宣言することができます。他のクラスは、そのプロトコルを採用する事を選び、1つ以上のメソッドを実装し、それによって動作を利用します。プロトコルを宣言するクラスは、プロトコル採用者によって実装されている場合は、プロトコルのメソッドを呼び出すことが期待されています。
公式、非公式なプロトコル
プロトコルには2種類があり、それは公式と非公式です:
- 公式なプロトコルは、クライアントクラスが実装すると予想されたメソッドのリストを宣言します。公式プロトコルには独自の宣言があり、採用、型チェック構文があります。その実装に必要か任意の、@required と @optional のキーワードとともに、メソッドを指定することができます。サブクラスは、それらの祖先で採用された公式なプロトコルを継承します。公式なプロトコルはまた、他のプロトコルをも採用できます。
- 非公式のプロトコルは暗黙のうちに、プロトコルのほぼすべてのオブジェクトの採用者になる NSObject 上のカテゴリです。(カテゴリは、それをサブクラス化せずにクラスにメソッドを追加できる、言語の機能です。)非公式のプロトコル内のメソッドの実装はオプションです。メソッドを呼び出す前に、呼び出し元のオブジェクトは、ターゲット・オブジェクトがそれを実装しているかどうかをチェックします。オプションのプロトコルメソッドが Objective-C 2.0 で導入されるまでは、非公式のプロトコルは Foundation と AppKit クラスがデリゲートを実装する方法に不可欠でした。
公式なプロトコルは、Objective-C 言語への拡張機能です。
正式なプロトコルを採用、準拠
クラスは、正式なプロトコルの採用を宣言するか、スーパークラスから採用を継承することができます。採用の構文は、クラスの @interface 宣言で角括弧を使用します。以下の例では、CAAnimation クラスはそのスーパークラスが NSObject であると宣言して、正式に3つのプロトコルを採用しています。
@interface CAAnimation : NSObject <NSCopying, CAMediaTiming, CAAction>
クラスと、そのクラスの全てのインスタンスは、クラスがプロトコルを採用したり、それを採用している他のクラスから継承する場合、公式なプロトコルに準拠していると言われます。プロトコルへの準拠はまた、クラスがプロトコルのすべての必要なメソッドを実装していることを意味します。conformsToProtocol: メッセージをオブジェクトに送信することにより、それプロトコルに準拠しているかどうか、実行時に決定できます。
独自のプロトコルを作成
また、独自のプロトコルを宣言し、そのプロトコルの採用者と通信するコードを実装できます。これを行う方法の説明については、すでに書かれたプロトコルのドキュメントを参照してください。
前提条件の記事
関連記事
既出の議論
プロトコルでの作業
サンプルコードプロジェクト
LocateMe
次の章
前の章