簡體   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