NS_REQUIRES_SUPER

作者: 39Coding | 来源:发表于2018-02-06 14:31 被阅读0次

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

相关文章

网友评论

    本文标题:NS_REQUIRES_SUPER

    本文链接:https://www.haomeiwen.com/subject/vjegzxtx.html