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