Вызывается ли awakeFromNib
сразу после viewController выделяется и инициализируется?
В какой именно точке вызывается вызов awakeFromNib
контроллера вида?
Из моего сеанса отладки я вижу, что awakeFromNib
для rootViewController не вызывается до тех пор, пока не будет выполнен [self.window makeKeyAndVisible]
.
Когда вызывается awakeFromNib?
Ответ 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
.