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

时间:2012-05-19 07:41:07

标签: objective-c nsobject objective-c-category

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

我发现了一些解决这个问题的问题,但所有的答案都是&#34;做这个解决方法!&#34;品种,而不是&#34;这是问题的原因&#34;多样性(或者只是错误,尽管被接受......)。我知道我可以解决这个问题。我真的很想理解为什么失败。

1 个答案:

答案 0 :(得分:1)

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

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

修改 :似乎示例代码已更改,我想我的回答已不再相关了。