NS_REQUIRES_SUPER

NS_REQUIRES_SUPER

__attribute((objc_requires_super))在2012年9月首次引入到CLANG中,并在2013年10月进行了介绍。在OS X和iOS上,现在都有一个NS_REQUIRES_SUPER宏,它根据编译器支持有条件地包装objc_requires_super属性。一旦方法声明附加了这个宏,编译器将会产生一个警告,如果super没有被覆盖该方法的子类调用。例如。:

@interface KPDObject : NSObject
- (void)reduceSize NS_REQUIRES_SUPER;
@end
@interface KPDDataObject : KPDObject
//...
@end
@implementation KPDDataObject
//...
- (void)reduceSize
{
    [self gzipDataIfNeeded];
}
@end

这将导致警告:KPDDataObject:方法可能会丢失[super reduceSize]调用。
正确地使用这个宏标记方法是非常有用的,并且应该大大减少由于缺少调用super而引入的错误。

忽略警告

NS_REQUIRES_SUPER很容易发现错误,但总会有情况需要打破规则。如果你确定你调用父类实现,你可以暂时忽略这个方法的警告,例如:


#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-missing-super-calls"
- (void)reduceSize
{
    [self gzipDataIfNeeded];
}
#pragma clang diagnostic pop

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容