そこで最近、super の呼び出しを忘れたときにコンパイラの警告を生成する便利な LLVM 機能について知りました。ただし、プロトコルで定義されたメソッドと組み合わせて使用しようとすると、誤ったコンパイラ警告が表示されました。
これが私が達成したいことです:
スクロール ビューを使用するすべてのビュー コントローラーで目的の動作を作成するコードを再利用しようとしているので、プロジェクト全体で使用する抽象ビュー コントローラー基本クラスを実装しました。
@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
この振る舞いについて何か考えはありますか?バグのようですね。何か不足していますか?