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

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

29
задан JiteshW 19 September 2013 в 11:12
поделиться

1 ответ

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

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

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

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

Источник

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

44
ответ дан 28 November 2019 в 01:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: