[英]Use __attribute__((objc_requires_super)) with protocol
我有这样的事情:
@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看起来很愚蠢时,不支持在协议中编写它。
那么有什么标准方法可以解决这个问题吗?
BaseClassWithProtocol
强制要求调用super。 它不是协议的一部分。 当然,某些类可以实现MyProtocol
但它没有强制要求。 这是协议的本质。 它们强加接口,而不是实现。
因此,使用该属性重新声明BaseClassWithProtocol
的方法对我来说似乎是完全合理的。 不知道为什么它“看起来很愚蠢”。
协议并不意味着为您的各种实现提供警告。 他们只是警告您是否同意在实施中包含所需的方法。 但是如何实现这些方法,这取决于采用该协议的Base类。 也就是说, 您应该在.h或.m文件中具有必要的功能。
考虑这种方式:
您的协议中有一个方法,您希望对超级呼叫发出警告。 现在你在一个类中采用协议,这是NSObject的子类。 但是NSObject类不符合您定义的协议。 你现在应该为你的班级收到警告吗? 根据您的要求,您应该收到警告。 但事实并非如此。 你几乎不会通过这个程序得到警告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.