繁体   English   中英

将__attribute __((objc_requires_super))与协议一起使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM