NSObject 实现协议上的类别会导致“未实现的方法”警告



如果我使用额外的方法定义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

我发现了几个解决这个问题的问题,但所有的答案都是"做这个解决方法!"的种类,而不是"这是问题的原因"的种类(或者只是完全错误,尽管被接受...... 我知道我可以解决这个问题。 我真的很想知道为什么它会失败。

问题是您再次宣布采用<NSObject>协议。协议在Objective-C中的工作方式(无论好坏(是类别实现必须实现其接口中指定的所有协议。

此外,协议一致性在Objective-C中是名义上的,而不是结构性的。也就是说,一个类响应正确的方法并不足以让它采用该协议。

编辑 :似乎示例代码已更改,我想我的答案不再真正相关。

最新更新