вызов суперкласса - PullRequest
1 голос
/ 05 мая 2011

Мне интересно, что происходит в этом случае иерархии классов

MySuperClass : UIViewController

MYSubClass : MySuperClass

В MySuperClass отсутствует метод, ViewWillAppear

Мой вопрос: если MySubClass имеет следующий метод

- (void)viewWillAppear:(BOOL)animated 
{
    [super viewWillAppear:animated];
}

этот код просто игнорируется (не будет выполнен) или будет вызываться viewWillAppear в UIViewController?

Просто интересно.

Ответы [ 2 ]

3 голосов
/ 05 мая 2011

Работает аналогично обычным вызовам методов. Когда вы вызываете super, среда выполнения проходит по цепочке суперклассов, пока не найдет ту, которая реализует запрошенный метод. Если он не найдет его, он вызовет методы переадресации, а если метод не будет переадресован, он вызовет doesNotRecognizeSelector:. Так что да, viewWillAppear будет вызываться в классе UIViewController.

0 голосов
/ 05 мая 2011

Скажем, у вас есть:

MySubClass *mySubController = [[MySubClass alloc] initWithNibNamed:nil bundle:nil];

Если вы сделаете что-то с mySubController, из-за которого появится его представление, например, поместите его в стек контроллера Nav, будет вызвана реализация -viewWillAppear в MySubClass. Как и сейчас, эта реализация просто вызывает реализацию супер. Поскольку MySuperClass не переопределяет -viewWillAppear, будет вызвана реализация UIViewController.

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