Как вы вызываете метод для суперкласса объекта Objective-C из другого места?

Если вы реализуете подкласс, вы можете в своей реализации явно вызвать метод суперкласса, даже если вы переопределили этот метод, т.е.:

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

Что делать, если вы хотите вызвать метод суперкласса откуда-то вне реализации подкласса, то есть:

[[object super] overriddenMethod]; //crashes

Это вообще возможно? И, соответственно, можно ли подняться более чем на один уровень в реализации, то есть:

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

person executor21    schedule 20.05.2010    source источник


Ответы (2)


Более приятный вариант (для отладки) — добавить метод категории, который сделает это за вас:

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

Тот факт, что нет более удобного способа сделать это, во многом является замыслом.

person Jens Ayton    schedule 20.05.2010

Вы можете отправить [[[object class] superclass] methodForSelector: ...] и вызвать через указатель IMP напрямую, если хотите... но если вы делаете это, вероятно, что-то не так с дизайном вашего приложения.

person Nicholas Riley    schedule 20.05.2010
comment
Не дизайн. Это нужно для отладки. - person executor21; 20.05.2010