1

所以我最近了解了一个方便的 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

对这种行为有任何想法吗?看起来像一个错误,不是吗?我错过了什么吗?

4

0 回答 0