2012-02-03 1 views
25

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

ответ

34

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

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

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

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

Source

EDIT 2: Это не относится к контроллерам просмотра загруженных из раскадровки.

+0

Меня интересует точная точка, когда она называется. Это правильно? Когда я отслеживаю в отладчике, он не вызывается до [window makeKeyAndVisible]. – Boon

+0

@Boon: отредактировано с подробным объяснением.Теперь, для точной связи с makeKeyAndVisible: Да, возможно, awakeFromNib будет получен до тех пор, пока окно не станет видимым, потому что нет смысла загружать ниб, если его не будет отображаться, какао и cocoaTouch обычно полагаются на ленивую загрузку для своих интерфейсов. – whitelionV

+0

- является ли unarchive асинхронным/сделано в отдельном потоке? – Boon

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^