NS_REQUIRES_SUPER
__attribute((objc_requires_super))
在2012年9月首次引入到CLANG
中摘仅,并在2013年10月進(jìn)行了介紹靶庙。在OS X和iOS上,現(xiàn)在都有一個NS_REQUIRES_SUPER
宏娃属,它根據(jù)編譯器支持有條件地包裝objc_requires_super
屬性六荒。一旦方法聲明附加了這個宏,編譯器將會產(chǎn)生一個警告矾端,如果super沒有被覆蓋該方法的子類調(diào)用掏击。例如。:
@interface KPDObject : NSObject
- (void)reduceSize NS_REQUIRES_SUPER;
@end
@interface KPDDataObject : KPDObject
//...
@end
@implementation KPDDataObject
//...
- (void)reduceSize
{
[self gzipDataIfNeeded];
}
@end
這將導(dǎo)致警告:KPDDataObject:
方法可能會丟失[super reduceSize]
調(diào)用秩铆。
正確地使用這個宏標(biāo)記方法是非常有用的园爷,并且應(yīng)該大大減少由于缺少調(diào)用super而引入的錯誤。
忽略警告
NS_REQUIRES_SUPER
很容易發(fā)現(xiàn)錯誤革娄,但總會有情況需要打破規(guī)則。如果你確定你調(diào)用父類實現(xiàn)添祸,你可以暫時忽略這個方法的警告,例如:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-missing-super-calls"
- (void)reduceSize
{
[self gzipDataIfNeeded];
}
#pragma clang diagnostic pop