Вызывается ли awakeFromNib
сразу после просмотра? Контроллер выделяется и инициализируется? В какой именно точке вызывается вызов awakeFromNib
контроллера вида? Из моего сеанса отладки я вижу, что awakeFromNib
для rootViewController не вызывается до тех пор, пока не будет выполнен [self.window makeKeyAndVisible]
.Когда пробуждается вызов FromNib?
ответ
awakeFromNib
вызывается после просмотра, а его подпрограммы были выделены и инициализированы. Гарантируется, что в представлении будут заданы все его переменные экземпляра.
РЕДАКТИРОВАТЬ: Подробный пересчет событий:
В процессе создания экземпляра, каждый объект в архиве находится разархивирована, а затем инициализируется с помощью метода, приличествующей его тип. Представления какао (и пользовательские представления, которые могут быть настроены с использованием связанной с ним привязки интерфейса интерфейса), инициализируются с использованием метода initWithCoder: . Пользовательские представления инициализируются с использованием метода initWithFrame: . Пользовательские классы, созданные в , инициализируются, используя их метод init.
После того, как все объекты были созданы и инициализированы из архива , код загрузки nib пытается восстановить соединения между выходами каждого объекта и соответствующими целевыми объектами. Если у ваших пользовательских объектов есть выходы, объект NSNib пытается восстановить все соединения, созданные в Interface Builder. Он начинает с попытки установить соединения, используя собственные методы вашего объекта. Для каждого выхода, которому требуется соединение, объект NSNib ищет метод формы setOutletName: в вашем объекте. Если этот метод существует, объект NSNib вызывает его, передавая целевой объект в качестве параметра. Если вы не определили метод сеттера с точным именем , объект NSNib ищет объект для экземпляра переменной (типа IBOutlet id) с соответствующим именем розетки и пытается установить его значение напрямую. Если переменная экземпляра с правильным именем не может быть найдена, инициализация этого соединения не возникает. Наконец, после того, как все объекты полностью инициализированы, каждый получает сообщение awakeFromNib.
EDIT 2: Это не относится к контроллерам просмотра загруженных из раскадровки.
Когда кодер хочет загрузить объект, который еще не инициализирован.
Exp: Управление в UITableViewCell
будет инициировано при кодовом вызове awakeFromNib
, которому не нужно cellforrow
.
Меня интересует точная точка, когда она называется. Это правильно? Когда я отслеживаю в отладчике, он не вызывается до [window makeKeyAndVisible]. – Boon
@Boon: отредактировано с подробным объяснением.Теперь, для точной связи с makeKeyAndVisible: Да, возможно, awakeFromNib будет получен до тех пор, пока окно не станет видимым, потому что нет смысла загружать ниб, если его не будет отображаться, какао и cocoaTouch обычно полагаются на ленивую загрузку для своих интерфейсов. – whitelionV
- является ли unarchive асинхронным/сделано в отдельном потоке? – Boon