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

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

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

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

[[object super] overriddenMethod]; //crashes

Возможно ли это? И, в дополнение, возможно ли подняться более одного уровня в реализации, т.е.:

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

Ответы

Ответ 1

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

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

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

Ответ 2

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