If we're talking about custom classes, you can add the following to your superclass's method declaration:
__attribute__((objc_requires_super));
And if you want to ensure that all of your UIViewController
subclasses call a method like [super viewDidLoad];
, you could subclass UIViewController
something like this:
@interface BaseViewController : UIViewController
- (void)viewDidLoad __attribute__((objc_requires_super));
// per Scott's excellent comment:
- (void)viewWillAppear:(BOOL)animated NS_REQUIRES_SUPER;
@end
@implementation BaseViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}
@end
And then just subclass BaseViewController
throughout your project, rather than subclassing UIViewController
.
Any subclass of BaseViewController
which implements viewDidLoad
and does not call [super viewDidLoad];
(which in turn calls UIViewController
's viewDidLoad
) will throw a warning.
EDIT: I've edited the answer to include an example of NS_REQUIRES_SUPER
, per Scott's excellent comment. The two examples (viewDidLoad
and viewWillAppear:
) are functionally equivalent. Though I imagine NS_REQUIRES_SUPER
probably will autocomplete for you. I'll likely begin using this macro myself in the future.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…