когда именно создаются элементы Interface Builder? - PullRequest
2 голосов
/ 23 апреля 2011

Скажем, я создаю приложение на основе навигации из шаблона в XCode4, затем в MainWindow.xib будет контроллер навигации, который в качестве дочернего элемента имеет RootViewController.

Когда именно тогда будет:

  1. Будет создан экземпляр RootViewController?
  2. Этот экземпляр как дочерний элемент связан с контроллером навигации?

В частности, когда речь идет о времени для метода applicationDelegate "didFinishLaunchingWithOptions" и когда это происходит.

Ответы [ 2 ]

4 голосов
/ 23 апреля 2011

Как указано в списке, MainWindow - это базовое имя основного файла. Таким образом, существует некоторый скрытый код, который будет сгенерирован на основе plist для загрузки файла nib главного окна при запуске. Это происходит до того, как didFinishLaunchingWithOptions.

Как только перо MainWindow загружается, происходит каскад действий, выполняемых в фоновом режиме, см. Жизненный цикл объекта перо в Руководстве по программированию ресурсов.

Один из этих шагов

Разархивирует граф объекта пера данные и создает экземпляры объектов.

Тогда почти наконец это происходит:

Отправляет сообщение awakeFromNib соответствующие объекты в перо файл, который определяет соответствие селектор: ... В iOS это сообщение отправляется только объекты интерфейса, которые были создается по коду загрузки пера. Это не отправлено владельцу файла, во-первых Респондент или любые другие прокси-объекты.

Первый способ, которым вы можете овладеть, - это awakeFromNib.

Чтобы ответить на три вопроса:

  1. Во время загрузки файла пера MainWindo
  2. Да, посмотрите на файл пера в конструкторе интерфейсов
  3. Все это происходит до того, как FinishLaunchingWithOptions
1 голос
/ 23 апреля 2011

Все, что будет выполнено до того, как код достигнет application:didFinishLaunchingWithOptions:. Функция UIApplicationMain() (вызывается из функции main() вашего приложения, загружает MainWindow.nib. Когда загружается файл NIB, создаются все объекты в файле NIB и устанавливаются соединения между объектами.

Обратите внимание, что это означает, что сами контроллеры представления уже существуют в application: didFinishLaunchingWithOptions:. То же самое не верно для представления контроллера представления. Контроллер представления загружает свой вид лениво при первом обращении к нему.

...