Apple Developer Connection
Advanced Search
Member Login Log In | Not a Member? Contact ADC

< 前ページ次ページ >

非形式プロトコル

形式プロトコルの他に、カテゴリ宣言の中のメソッドをグループ化することで非形式プロトコルを定義できます。

@interface NSObject ( MyXMLSupport )
- (NSXMLElement *) XMLRepresentation;
- initFromXMLRepresentation:(NSXMLElement *)XMLElement;
@end

非形式プロトコルは、NSObjectを継承する任意のクラスとメソッド名を緩やかに関連付けるため、通常は、NSObjectクラスのカテゴリとして宣言します。すべてのクラスはルートクラスを継承するため、メソッドの対象は継承階層のどの部分にも限定されません(非形式プロトコルを別のクラスのカテゴリとして宣言し、継承階層の特定の分岐に適用対象を限定することも可能ですが、そうするべき理由はほとんどありません)。

プロトコルの宣言に使用する場合、カテゴリインターフェイスには対応する実装がありません。その代わりに、プロトコルを実装するクラスは、自身のインターフェイスファイルでもう一度メソッドを宣言し、実装ファイルで他のメソッドと一緒に定義します。

非形式プロトコルはカテゴリ宣言の規則に反して、メソッドのグループをリストアップする一方で、それらを特定のクラスや実装と関連付けません。

カテゴリで宣言したプロトコルは非形式プロトコルであるため、言語によるサポートはほとんど受けません。コンパイル時の型チェックも、オブジェクトがプロトコルに準拠しているかどうかを確認する実行時のチェックもありません。これらのメリットを得るには、形式プロトコルを使用する必要があります。非形式プロトコルは、デリゲートのためなどですべてのメソッドの実装が任意である場合に役立つかもしれませんが、(Mac OS X v10.5以降では)一般的には任意のメソッドと形式プロトコルを一緒に使用するほうがよいでしょう。



< 前ページ次ページ >


Last updated: 2007-10-31




Did this document help you?
Yes: Tell us what works for you.

It’s good, but: Report typos, inaccuracies, and so forth.

It wasn’t helpful: Tell us what would have helped.
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