Вызывается ли awakeFromNib
сразу после выделения и инициализации viewController?
В какой именно момент вызывается awakeFromNib
контроллера представления?
Из моего сеанса отладки я вижу, что awakeFromNib
для rootViewController не вызывается до тех пор, пока не будет выполнен [self.window makeKeyAndVisible]
.
awakeFromNib
вызывается после того, как представление и его подпредставления были выделены и инициализированы. Гарантируется, что в представлении будут установлены все переменные экземпляра на выходе.
РЕДАКТИРОВАТЬ: Подробное описание событий:
В процессе создания экземпляра каждый объект в архиве не архивируется, а затем инициализируется с использованием метода, соответствующего его типу. Представления какао (и настраиваемые представления, которые можно настраивать с помощью связанной палитры Interface Builder) инициализируются с использованием их метода initWithCoder :. Пользовательские представления инициализируются с использованием их метода initWithFrame :. Пользовательские классы, которые были созданы в nib, инициализируются с использованием их метода init.
Как только все объекты были созданы и инициализированы из архива, код загрузки пера пытается восстановить соединения между выходами каждого объекта и соответствующими целевыми объектами. Если ваши пользовательские объекты имеют выходы, объект NSNib пытается восстановить все соединения, созданные в Interface Builder. Сначала он пытается установить соединение, используя собственные методы вашего объекта. Для каждого выхода, которому требуется соединение, объект NSNib ищет метод вида setOutletName: в вашем объекте. Если этот метод существует, объект NSNib вызывает его, передавая целевой объект в качестве параметра. Если вы не определили метод установки с таким точным именем, объект NSNib ищет в объекте переменную экземпляра (типа IBOutlet id) с соответствующим именем выхода и пытается установить его значение напрямую. Если переменная экземпляра с правильным именем не может быть найдена, инициализация этого соединения не происходит. Наконец, после полной инициализации всех объектов каждый получает сообщение awakeFromNib.
РЕДАКТИРОВАТЬ 2 : это не относится к контроллерам представления, загруженным из раскадровок.