iOS应用程序中真的需要MainWindow.xib吗?

时间:2011-10-24 04:17:17

标签: xcode interface-builder ios5 xib

在使用Xcode 4.2进行任何类型的iOS 5.0开发之前,Xcode在模板中提供了“MainWindow.xib”。下载并使用iOS 5.0使用Xcode 4.2后,我注意到所提供的模板都不包含任何“MainWindow.xib”文件。我们还需要这个吗?我注意到在App_Delegate中的“application didFinishLaunchingWithOptions”方法中模板现在包含创建一些“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 个答案:

答案 0 :(得分:15)

始终可以选择不使用MainWindow.xib。可以通过执行以下操作以编程方式加载UIWindow:

1)确保main.m中对UIApplicationMain的调用如下所示:

UIApplicationMain(argc, argv, nil, @"MyAppDelegateClassName");

而不是:

UIApplicationMain(argc, argv, nil, nil);

2)确保Info.plist没有“MainWindow.xib”值作为主nib文件。

3)以编程方式在应用程序委托中加载UIWindow。

所以,不,你不必使用MainWindow.xib,实际上,你从来没有。你总是可以通过编程方式做事。

这是一个很好的问题,为什么Apple在默认的Xcode设置中进行了此更改,我不知道答案。但它可能需要具有性能或过渡到ARC或小应用程序文件大小或完全不同的东西。

答案 1 :(得分:4)

我认为现在缺席的原因是以编程方式创建窗口比打开xib文件和取消归档对象要高效得多。通常,如果您可以在一行代码中执行此操作,则应在代码中执行此操作。

阅读Matthew Gillingham的回答,了解如何在没有MainWindow.xib的情况下手动更改旧项目的工作。

答案 2 :(得分:2)

我总是对MainWindow.xib的使用感到困惑:即使使用它,我仍然需要设置window的rootViewController或addSubview。 MainWindow.xib中是否包含该信息?为什么我还需要告诉窗口呢?

因此,删除MainWindow.xib似乎有意义。