不使用 ARC 时,在您的 dealloc 方法中未调用 [super dealloc] 时会收到警告。
我试图用一个经常被子类化的类来实现类似的东西,以在实现子类的人不调用 super 时警告他们。
有任何想法吗?
不使用 ARC 时,在您的 dealloc 方法中未调用 [super dealloc] 时会收到警告。
我试图用一个经常被子类化的类来实现类似的东西,以在实现子类的人不调用 super 时警告他们。
有任何想法吗?
最近版本的 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
有关告诉编译器子类必须调用的直接方法,请参见bbum 的答案super
。
苹果通常做的是提供一个钩子,比如viewDidLoad
. Apple 不会在 base 中做任何工作-[UIViewController viewDidLoad]
。这是一个空方法。取而代之的是,Apple 在其他地方以您不允许覆盖的私有方法执行其工作,并viewDidLoad
从该方法调用您的方法。因此,即使您忘记调用[super viewDidLoad]
您的UIViewController
子类,Apple 的所有工作仍然可以完成。
也许您可以修改您的 API 以使用类似的模式。
NS_REQUIRES_SUPER
是现代的表达方式
__attribute__((objc_requires_super))