/ /委任者は本当にObjective-Cのカテゴリですか? -Objective-C、デリゲート、カテゴリ

デリゲートはObjective-Cのカテゴリですか? - objective-c、delegates、categories

私は非公式プロトコルを理解しようとしていますが、今までは非公式プロトコルは一種のカテゴリであることを知っていましたが、委任者にはカテゴリ名がないのはなぜですか?

例:

#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 クラス)。


したがって、カテゴリとプロトコルは互いにまったく逆です。