一,父類的方法不需要實(shí)現(xiàn)(是個(gè)空方法),子類按照情況實(shí)現(xiàn)
某些情況下,父類提供一個(gè)方法,這個(gè)方法在父類中不需要處理業(yè)務(wù),通常會(huì)寫成一個(gè)空方法
- (void)viewDidDisappearPop{
}
或者直接不去實(shí)現(xiàn)(這時(shí)候會(huì)出現(xiàn)警告??)。這種方式不是很優(yōu)雅,我們可以通過協(xié)議的方式處理這種情況。
實(shí)現(xiàn):
1,使用協(xié)議聲明父類中需要在子類中進(jìn)行實(shí)現(xiàn)的方法
// 協(xié)議
@protocol CKBaseViewControllerDidDisappearPopProtocal <NSObject>
@optional
- (void)viewDidDisappearPop;
@end
父類遵守我們的協(xié)議(如果不在父類中遵守協(xié)議,父類中調(diào)用協(xié)議中方法會(huì)報(bào)錯(cuò))
@interface CKBaseViewController : UIViewController <CKBaseViewControllerDidDisappearPopProtocal>
@end
在實(shí)現(xiàn)文件中調(diào)用到這個(gè)方法的地方判斷是否實(shí)現(xiàn)了這個(gè)方法,如果實(shí)現(xiàn)了這個(gè)方法,進(jìn)行調(diào)用
// 在控制器消失 `- (void)viewDidDisappear:(BOOL)animated` 的時(shí)候,調(diào)用協(xié)議中聲明的方法
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
if ([self respondsToSelector:@selector(viewDidDisappearPop)]) {
[self viewDidDisappearPop];
}
}
二,重寫父類方法必須調(diào)用 super 調(diào)用對(duì)應(yīng)方法時(shí)使用
來源: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 方法

Paste_Image.png
出現(xiàn)黃色警告??,沒有調(diào)用 [super test] 方法。運(yùn)行不會(huì)報(bào)錯(cuò)