|
|
Log In | Not a Member? |
Contact ADC |
| < 前ページ次ページ > |
オブジェクトのクラスが分かっていれば、そのインターフェイス宣言(および、継承元のクラスのインターフェイス宣言)を参照して、そのオブジェクトが応答する対象となるメッセージを調べることができます。これらの宣言は、受信できるメッセージを提示します。プロトコルは、送信するメッセージを提示する方法も提供します。
通信は双方向で機能し、オブジェクトはメッセージを受信するだけでなく、送信もします。たとえば、あるオブジェクトは特定操作の責任を別のオブジェクトにデリゲートするかもしれませんし、あるいは、別のオブジェクトに情報を要求するだけかもしれません。場合によっては、オブジェクトがその動作を他のオブジェクトに積極的に通知し、他のオブジェクトが必要な措置を取れるようにすることも考えられます。
同じプロジェクトの一部として送信側のクラスとレシーバのクラスを開発する場合(あるいは、他からレシーバとそのインターフェイスファイルが提供される場合)、この通信は簡単に調整できます。送信側は単に、レシーバのインターフェイスファイルをインポートするだけです。インポートしたファイルには、送信側が送信するメッセージで使用する、メソッドセレクタが宣言されています。
しかし、まだ定義されていないオブジェクト(実装が他の人に任されているオブジェクト)にメッセージを送信するオブジェクトを開発する場合は、レシーバのインターフェイスファイルがありません。メッセージで使用する、自分では実装しないメソッドを宣言するために、別の方法が必要になります。プロトコルは、このような目的に使用できます。プロトコルは、クラスが使用するメソッドをコンパイラに通知し、オブジェクトを連携させるために定義する必要があるメソッドを他の実装者に知らせます。
たとえば、helpOut:などのメッセージを送信することで、別のオブジェクトに支援を要請するオブジェクトを開発するとします。これらのメッセージのアウトレットを記録するassistantインスタンス変数を用意し、インスタンス変数を設定する付随メソッドを定義します。このメソッドにより、他のオブジェクトは、オブジェクトのメッセージの潜在的受信者として自身を登録することができます。
- setAssistant:anObject |
{ |
assistant = anObject; |
} |
次に、メッセージをassistant に送信するたびに、メッセージに応えるメソッドがレシーバに実装されていることをチェックします。
- (BOOL)doWork |
{ |
... |
if ( [assistant respondsTo:@selector(helpOut:)]) { |
[assistant helpOut:self]; |
return YES; |
} |
return NO; |
} |
このコードを記述する時点では、assistant としてどのようなオブジェクトが登録されるかは分からないため、可能なのはhelpOut:メソッドのプロトコルを宣言することのみです。メソッドを実装するクラスのインターフェイスファイルはインポートできません。
| < 前ページ次ページ > |
Last updated: 2007-10-31
|
Get information on Apple products.
Visit the Apple Store online or at retail locations. 1-800-MY-APPLE Copyright © 2007 Apple Inc. All rights reserved. | Terms of use | Privacy Notice |