我有这样的事情:
@protocol MyProtocol <NSObject>
- (void)oneMethod;
@end
@interface BaseClassWithProtocol : NSObject <MyProtocol>
@end
@interface ChildClassWithProtocol : BaseClassWithProtocol
@end
BaseClassWithProtocol
已实施oneMethod
,如果ChildClassWithProtocol
在其oneMethod
实施中未调用超级,我想显示警告。
但我不知道我应该在哪里写__attribute__((objc_requires_super))
。
在.h中重新定义oneMethod看起来很愚蠢时,不支持在协议中编写它。
那么有没有可以解决问题的标准方法呢?
答案 0 :(得分:7)
BaseClassWithProtocol
强制要求拨打超级电话。它不是协议的一部分。当然,有些班级可以实施MyProtocol
,但是没有强制要求。这是协议的本质。它们强加接口,而不是实现。
因此,使用该属性重新声明BaseClassWithProtocol
中的方法对我来说似乎是非常明智的。不知道为什么它看起来很愚蠢&#34;。
答案 1 :(得分:1)
协议并不意味着为您的各种实施提供警告。他们只是警告您是否同意在实施中包含所需的方法。但是,如何实施这些方法,以及采用该协议的 Base 类。也就是说,您应该在.h或.m文件中拥有必要的功能。
考虑这种方式:
您的协议中有一个方法,您希望对超级呼叫发出警告。现在你在一个类中采用协议,这是NSObject的子类。但是NSObject类并不符合您定义的协议。你现在应该为你的班级收到警告吗? 根据您的要求,您应该收到警告。但事实并非如此。你几乎不会通过这个程序得到警告。