Действительно ли MainWindow.xib действительно необходим в приложении для iOS?
Прежде чем приступить к разработке любого типа iOS 5.0 с использованием Xcode 4.2, Xcode предоставил "MainWindow.xib" в шаблонах. После загрузки и игры с Xcode 4.2 с iOS 5.0 я заметил, что ни один из предоставленных шаблонов не включает файлы "MainWindow.xib". Нам это нужно больше? Я заметил, что в методе "application didFinishLaunchingWithOptions" в App_Delegate теперь шаблоны включают в себя код, который создает некоторое "UIWindow", и, если у вас есть какие-либо контроллеры навигации, он соответствующим образом обновляет окно.
// code that was pulled from a Master Detail application template
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
Наверное, мой вопрос: нужен ли мне "MainWindow.xib" больше, и если да, то почему шаблоны Apple исключают их?
3 ответа
Я думаю, что причина его отсутствия в том, что создание окна программно гораздо эффективнее, чем открытие файла XIB и разархивирование объектов. Как правило, если вы можете сделать это в одной строке кода, вы должны сделать это в коде.
Прочтите ответ Мэтью Джиллингема о том, как вручную изменить старый проект для работы без MainWindow.xib.
Это всегда была возможность не использовать MainWindow.xib. UIWindow может быть загружено программно, выполнив следующие действия:
1) Убедитесь, что вызов UIApplicationMain в main.m выглядит следующим образом:
UIApplicationMain(argc, argv, nil, @"MyAppDelegateClassName");
а не это:
UIApplicationMain(argc, argv, nil, nil);
2) Убедитесь, что в Info.plist нет значения "MainWindow.xib" в качестве основного файла пера.
3) Загрузка UIWindow программно в делегате приложения.
Итак, нет, вам не нужно использовать MainWindow.xib и, на самом деле, вы никогда не используете. Вы всегда можете делать вещи программно.
Это хороший вопрос, почему Apple сделала это изменение в настройках Xcode по умолчанию, и я не знаю ответа. Но это может быть связано с производительностью или переходом на ARC или с небольшими размерами файлов приложений или чем-то еще в целом.
Меня всегда смущает использование MainWindow.xib: даже с этим мне все еще нужно установить rootViewController окна или добавить к нему SubSubview. Разве эта информация не содержится в MainWindow.xib? Почему мне еще нужно рассказать об этом Окну?
Так что удаление MainWindow.xib, кажется, имеет смысл.