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

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

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

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

[[object super] overriddenMethod]; //crashes

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

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

Ответы [ 2 ]

22 голосов
/ 21 мая 2010

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

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

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

13 голосов
/ 20 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...