我有这样的事情:
@protocol MyProtocol <NSObject>
- (void)oneMethod;
@end
。
@interface BaseClassWithProtocol : NSObject <MyProtocol>
@end
。
@interface ChildClassWithProtocol : BaseClassWithProtocol
@end
BaseClassWithProtocol
已实现oneMethod
,如果ChildClassWithProtocol
在oneMethod
实现中未调用super,我想显示警告。但是我不知道应该在哪里写
__attribute__((objc_requires_super))
。在协议中编写它不被支持,而在.h中重新定义oneMethod看起来很愚蠢。
那么,有什么标准的方法可以解决这个问题?
最佳答案
调用super的要求是由BaseClassWithProtocol
施加的。它不是协议的一部分。当然,某些类可以实现MyProtocol
,但它希望实现而无需强加该要求。这就是协议的本质。它们强加接口,而不是实现。
因此,在BaseClassWithProtocol
中使用该属性重新声明该方法对我来说似乎非常明智。不知道为什么它“看起来很愚蠢”。