我有这样的事情:

@protocol MyProtocol <NSObject>

- (void)oneMethod;

@end


@interface BaseClassWithProtocol : NSObject <MyProtocol>

@end


@interface ChildClassWithProtocol : BaseClassWithProtocol

@end
BaseClassWithProtocol已实现oneMethod,如果ChildClassWithProtocoloneMethod实现中未调用super,我想显示警告。

但是我不知道应该在哪里写__attribute__((objc_requires_super))

协议中编写它不被支持,而在.h中重新定义oneMethod看起来很愚蠢。

那么,有什么标准的方法可以解决这个问题?

最佳答案

调用super的要求是由BaseClassWithProtocol施加的。它不是协议的一部分。当然,某些类可以实现MyProtocol,但它希望实现而无需强加该要求。这就是协议的本质。它们强加接口,而不是实现。

因此,在BaseClassWithProtocol中使用该属性重新声明该方法对我来说似乎非常明智。不知道为什么它“看起来很愚蠢”。

08-17 10:46