不调用[super method]时发出警告

时间:2013-04-18 22:25:15

标签: objective-c xcode

不使用ARC时,在dealloc方法中不调用[super dealloc]时会收到警告。

我正在尝试实现类似于类的方法,这些类经常被子类化以警告实现子类的人在不调用super时。

有什么想法吗?

3 个答案:

答案 0 :(得分:85)

llvm的最新版本添加了一个属性,指示子类必须调用super:

@interface Barn:NSObject
- (void)openDoor NS_REQUIRES_SUPER;
@end

@implementation Barn
- (void) openDoor
{
    ;
}
@end

@interface HorseBarn:Barn
@end
@implementation HorseBarn
- (void) openDoor
{
    ;
}
@end

编译以上内容会产生警告:

Method possibly missing a [super openDoor] call

答案 1 :(得分:6)

更新

请参阅bbum's answer以直接告诉编译器子类必须调用super

ORIGINAL

Apple通常提供钩子,例如viewDidLoad。 Apple在基础-[UIViewController viewDidLoad]中没有做任何工作。这是一个空洞的方法。相反,Apple在其他地方开展工作,使用一些您不允许覆盖的私有方法,并从该方法调用viewDidLoad。因此,即使您忘记在[super viewDidLoad]子类中调用UIViewController,Apple的所有工作仍然可以完成。

也许您可以修改您的API以使用类似的模式。

答案 2 :(得分:3)

NS_REQUIRES_SUPER

的现代表达
__attribute__((objc_requires_super))