一,父类的方法不需要实现(是个空方法),子类按照情况实现
某些情况下,父类提供一个方法,这个方法在父类中不需要处理业务,通常会写成一个空方法
- (void)viewDidDisappearPop{
}
或者直接不去实现(这时候会出现警告⚠️)。这种方式不是很优雅,我们可以通过协议的方式处理这种情况。
实现:
1,使用协议声明父类中需要在子类中进行实现的方法
// 协议
@protocol CKBaseViewControllerDidDisappearPopProtocal <NSObject>
@optional
- (void)viewDidDisappearPop;
@end
父类遵守我们的协议(如果不在父类中遵守协议,父类中调用协议中方法会报错)
@interface CKBaseViewController : UIViewController <CKBaseViewControllerDidDisappearPopProtocal>
@end
在实现文件中调用到这个方法的地方判断是否实现了这个方法,如果实现了这个方法,进行调用
// 在控制器消失 `- (void)viewDidDisappear:(BOOL)animated` 的时候,调用协议中声明的方法
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
if ([self respondsToSelector:@selector(viewDidDisappearPop)]) {
[self viewDidDisappearPop];
}
}
二,重写父类方法必须调用 super
调用对应方法时使用
来源:http://m.weibo.cn/status/4064104203128859?uid=3321824014&id=4064104203128859&v_p=11&type=comment
#ifndef NS_REQUIRES_SUPER
#if __has_attribute(objc_requires_super)
#define NS_REQUIRES_SUPER __attribute__((objc_requires_super))
#else
#define NS_REQUIRES_SUPER
#endif
#endif
@interface View1 : UIView
- (void)test NS_REQUIRES_SUPER;
@end
View2 继承 View1,重写 - (void)test
方法
出现黄色警告⚠️,没有调用 [super test]
方法。运行不会报错