2010-05-20 1 views
14

Если вы реализуете подкласс, вы можете, в вашей реализации, явно вызвать метод суперкласса, даже если вы переопределить этот метод, то есть:Как вы вызываете метод для суперкласса объекта 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? 

ответ

20

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

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

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

13

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

+1

Не дизайн. Это нужно для отладки. – executor21

+0

В этом случае IMP прочь. :) –

Смежные вопросы