NSObject追加のメソッドを使用してプロトコルのサブプロトコルを定義NSObjectし、そのプロトコルへの準拠を宣言するカテゴリを定義して実装すると、コンパイル時に警告が表示されます。コンパイラは、私のカテゴリがプロトコルNSObjectで宣言されたすべてのメソッドを実装していないと不平を言います。NSObject
なぜそうなのかわかりません。NSObjectクラスは(プロトコルに準拠していることを宣言<Foundation/NSObject.h>していNSObjectます(そして、冗長に、これらのメソッドを実装していることを宣言しています)-それで十分ではありませんか?
ここでの問題の原因は何ですか?
サンプル コード - これをコンパイルすると、NSObject (CategoryToImplementMyProtocol)実装に関する警告が表示されます。
@protocol MyProtocol <NSObject>
- (void)myMethod;
@end
@interface NSObject (CategoryToImplementMyProtocol) <MyProtocol>
@end
@implementation NSObject (CategoryToImplementMyProtocol)
- (void)myMethod
{
NSLog("A la peanut butter sandwiches!");
}
@end
これに対処するいくつかの質問を見つけましたが、すべての答えは「この回避策を実行してください!」というものでした。「これが問題の原因である」ということではありません(または、受け入れられているにもかかわらず、単に間違っています...)。私はこれを回避できることを知っています。失敗する理由を本当に理解したいです。