【发布时间】:2012-05-19 07:41:06
【问题描述】:
如果我用额外的方法定义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
我发现了几个问题来解决这个问题,但所有的答案都是“做这个解决方法!”多样性,而不是“这是问题的原因”多样性(或者只是完全错误,尽管被接受了......)。我知道我可以解决这个问题。我真的很想了解为什么它会失败。
【问题讨论】:
标签: objective-c nsobject objective-c-category