1

そこで最近、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

この振る舞いについて何か考えはありますか?バグのようですね。何か不足していますか?

4

0 に答える 0