所以我最近learned关于一个方便的LLVM功能,只要你忘记调用super,就会产生编译器警告。当我尝试将它与协议中定义的方法结合使用时,我收到了错误的编译器警告。
这就是我想要实现的目标:
我正在尝试重新使用代码在我使用滚动视图的所有视图控制器中创建所需的行为,因此我实现了一个抽象的视图控制器基类,以便在整个项目中使用:
@interface GCOViewController : UIViewController
- (void)scrollViewDidScroll:(UIScrollView*)scrollView __attribute__((objc_requires_super));
@end
@implementation GCOViewController
- (void)scrollViewDidScroll:(UIScrollView*)scrollView
{
// Do something (doesn't matter what exactly)
}
@end
在我的具体视图中,控制器子类我正在调用这样的代码:
@interface GCOConcreteViewController : GCOViewController
@end
@implementation GCOConcreteViewController
- (void)scrollViewDidScroll:(UIScrollView*)scrollView
{
[super scrollViewDidScroll:scrollView];
// Do some additional things in the concrete subclass
}
@end
虽然功能本身就像它应该编译器仍然向我显示警告
Method possibly missing a [super scrollViewDidScroll:] call
有关此行为的任何想法?看起来像一个bug,不是吗?我错过了什么吗?