Изменения шаблона Xcode 4.2 - UIApplication & MainWindow.xib - PullRequest
6 голосов
/ 21 октября 2011

Справочная информация: Вплоть до Xcode 4.2 новые проекты, созданные с использованием любого из шаблонов, содержали MainWindow.xib и, следовательно, передавали nil в качестве четвертого аргумента UIApplicationMain ().Начиная с Xcode 4.2, все шаблоны создают экземпляр делегата приложения, передавая строку класса в качестве четвертого аргумента и не создавая окно приложения в xib.

Выполнить эту настройку в 4.2 довольно просто, и, конечно,все работает как положено: создайте xib, установив для владельца файла значение UIApplication и подключив делегата, укажите его в Info.plist, ноль четвертый аргумент в main ().

Вопрос: Почему Appleпоощряя создание экземпляра делегата приложения и создание UIWindow в коде теперь вместо «старого способа?»Каковы преимущества?

Соображения: Я бы ожидал, что это новое поведение шаблона, если вы решите использовать раскадровку в качестве способа управления пользовательским интерфейсом, но если вы снимите флажок "Использовать раскадровки", я быожидали старого шаблона pass-nil-and-use-MainWindow.xib.

Этот вопрос был задан окольным путем здесь , но ответы на него немного тонкие при обсуждении.

1 Ответ

7 голосов
/ 25 октября 2011

Вы спрашиваете, почему Apple что-то делает? Не может быть однозначного ответа, если Apple явно не высказалась, чего они не сделали.

Лично я нахожу новый подход значительно более элегантным, прозрачным и пуленепробиваемым. Как вы правильно заметили, в старом подходе основной пиб автоматически загружался средой выполнения в ответ на настройку Info.plist, а все остальное происходило с помощью пера, в частности создание экземпляра делегата приложения и окна и соответствующая проводка (делегат приложения должен быть делегатом приложения, окно должно быть окном делегата приложения), за исключением того, что затем мы возвращаемся к коду в делегате приложения для окончательного представления интерфейса.

Это было трудно понять; мне потребовалось много словоблудия, чтобы описать это в моей книге. Это было также легко сломать. Перо должно знать имя класса делегата приложения, поэтому, если вам не понравились те забавные длинные имена, которые были созданы по умолчанию, вы можете легко все испортить, когда вы их изменили.

Теперь, однако, делегат приложения просто называется App Delegate и создается в коде UIApplicationMain (), как вы правильно сказали; и все else также также выполняется в коде как прямое продолжение: создается экземпляр делегата приложения и вызывается didFinishLaunching, после чего мы создаем окно в коде, присваиваем его нашему свойству в коде загрузите перо, если оно есть в коде, установите rootViewController окна в коде и покажите интерфейс в коде, как и раньше.

Таким образом, самозагрузка напрямую отображается для просмотра, поскольку это весь код. Это облегчает понимание и изменение, не нарушая ничего. Похоже, что раньше дизайнер шаблонов просто хвастался тем, сколько вещей можно сделать, чтобы волшебным образом и автоматически происходило за сценой; теперь все происходит открыто, явно.

...