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

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

29 голосов
/ 03 февраля 2012

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

Ответы [ 2 ]

43 голосов
/ 03 февраля 2012

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

РЕДАКТИРОВАТЬ: Подробный пересчет событий:

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

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

Источник

РЕДАКТИРОВАТЬ 2 : Это не относится к контроллерам представления, загруженным из раскадровок.

0 голосов
/ 12 февраля 2014

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

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

...