Как Вы называете метод для суперкласса объекта 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?
16
задан executor21 20 May 2010 в 19:45
поделиться

2 ответа

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

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

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

22
ответ дан 30 November 2019 в 16:49
поделиться

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

14
ответ дан 30 November 2019 в 16:49
поделиться