私は非公式プロトコルを理解しようとしていますが、今までは非公式プロトコルは一種のカテゴリであることを知っていましたが、委任者にはカテゴリ名がないのはなぜですか?
例:
#import <Cocoa/Cocoa.h>
@class FileSystemNode;
@interface AppController : NSObject { // Where is the Category ????
@private
IBOutlet NSBrowser *_browser;
FileSystemNode *_rootNode;
}
@end
ありがとう。
回答:
回答№1は1非公式のプロトコルは ない 「一種のカテゴリ」。
クラスがプロトコルに準拠している場合(たとえば @interface MyClass <MyProtocol>
)そのクラスで必要なすべてのメソッドを呼び出すことができることが保証されています MyProtocol
。 (クラスが実際にそれらを実装していない限り[リンカーは動的バインディングのためにそれを知ることができません]、これはプログラミングエラーであり、うそですが、通常はそうではありません。)
一方、カテゴリを使用すると、既存のクラスを取得して新しいメソッドで拡張できます(たとえば、 removeAllSubviews
既に存在するメソッド NSView
クラス)。
したがって、カテゴリとプロトコルは互いにまったく逆です。