Подтвердить что ты не робот

Когда вызывается awakeFromNib?

Вызывается ли awakeFromNib сразу после viewController выделяется и инициализируется? В какой именно точке вызывается вызов awakeFromNib контроллера вида? Из моего сеанса отладки я вижу, что awakeFromNib для rootViewController не вызывается до тех пор, пока не будет выполнен [self.window makeKeyAndVisible].

4b9b3361

Ответ 1

awakeFromNib вызывается после представления, а его дочерние объекты были выделены и инициализированы. Гарантируется, что в представлении будут заданы все его переменные экземпляра.

EDIT: Подробный пересчет событий:

В процессе создания экземпляра каждый объект в архиве unarchived, а затем инициализируется методом, соответствующим его типу. Cocoa представления (и пользовательские представления, которые можно настроить с помощью связанная с палитрой Interface Builder) инициализируются с использованием Метод initWithCoder:. Пользовательские представления инициализируются с использованием initWithFrame: метод. Пользовательские классы, созданные в ноль инициализируется с использованием метода init.

Как только все объекты были созданы и инициализированы из архива, код загрузки nib пытается восстановить соединения между выводами каждого объекта и соответствующими целевыми объектами. Если у ваших пользовательских объектов есть выходы, объект NSNib пытается восстановите любые соединения, созданные в Interface Builder. Это начинается с попытки установить соединения, используя ваши собственные объекты методы в первую очередь. Для каждой розетки, требующей подключения, NSNib объект ищет метод формы setOutletName: в вашем объекте. Если этот метод существует, объект NSNib вызывает его, передавая целевой объект как параметр. Если вы не определили метод сеттера с этим точное имя, объект NSNib ищет объект для экземпляра переменная (типа IBOutlet id) с соответствующим именем розетки и пытается установить его значение напрямую. Если переменная экземпляра с правильное имя не может быть найдено, инициализация этого соединения не возникает. Наконец, после того, как все объекты будут полностью инициализированы, каждая  получает сообщение awakeFromNib.

Источник

EDIT 2. Это не относится к контроллерам представлений, загружаемым из раскадровки.

Ответ 2

Когда кодер хочет загрузить объект, который еще не инициализирован.

Exp: Управление в UITableViewCell будет инициализироваться при вызове кода awakeFromNib, которому не требуется cellforrow.