16

サブクラスを実装している場合、そのメソッドをオーバーライドした場合でも、実装内でスーパークラスのメソッドを明示的に呼び出すことができます。

[self overriddenMethod]; //calls the subclass's method
[super overriddenMethod]; //calls the superclass's method

サブクラスの実装の外側のどこかからスーパークラスのメソッドを呼び出したい場合、つまり:

[[object super] overriddenMethod]; //crashes

これは可能ですか?さらに、実装内で複数のレベルに上がることは可能ですか。つまり、次のようになります。

[[super super] overriddenMethod]; //will this work?
4

2 に答える 2

24

(デバッグ用の)より快適なオプションは、それを行うカテゴリメソッドを追加することです。

- (void) callSuperMethod { [super overriddenMethod]; }

これを行うためのこれ以上便利な方法がないという事実は、非常に仕様によるものです。

于 2010-05-20T20:19:33.137 に答える
14

必要に応じて、IMP ポインターを介して直接送信[[[object class] superclass] methodForSelector: ...]および呼び出しを行うことができますが、これを行っている場合は、アプリケーションの設計に非常に問題がある可能性があります。

于 2010-05-20T19:48:44.197 に答える