NS_REQUIRES_SUPER

NS_REQUIRES_SUPER

__attribute((objc_requires_super))在2012年9月首次引入到CLANG中,并在2013年10月進行了介紹。在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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容