Xcode 4.2模板更改 - UIApplication和MainWindow.xib

ede*_*y05 6 xcode mainwindow uiapplication xcode4 xcode-template

背景:直到Xcode 4.2,使用任何模板创建的新项目都包含MainWindow.xib,因此将nil作为UIApplicationMain()的第四个参数传递.从Xcode 4.2开始,所有模板都通过将类字符串作为第四个参数传递来实例化应用程序委托,而不是在xib中构建应用程序的窗口.

在4.2中完成此设置是微不足道的,当然它按预期工作:创建xib设置文件的所有者到UIApplication并连接委托,在Info.plist中指定它,在main()中指定第四个参数.

问题:为什么Apple鼓励实例化应用程序委托并在代码中构建UIWindow而不是"旧方法"?有什么好处?

注意事项:如果您选择使用故事板作为管理UI的方式,我会期望这种新的模板行为,但是如果您取消选中"使用故事板",我会期望旧的pass-nil-and-use-MainWindow.xib模板.

这个问题在这里以迂回的方式提出,但讨论的答案有点薄弱.

mat*_*att 7

你在问苹果为什么要做某事?除非苹果公司明确表示,他们还没有做过,否则没有确定的答案.

就个人而言,我发现新方法更加优雅,透明和防弹.正如您所说,在旧方法中,主nib由运行时自动加载以响应Info.plist设置,并且所有其他事件都是通过nib完成的,特别是应用程序委托和窗口的实例化.相关的布线(应用程序委托必须成为应用程序委托,窗口必须成为应用程序委托的窗口),除此之外我们回到应用程序委托中的代码以进行界面的最终呈现.

这很难理解; 在我的书中描述它需要大量的措辞.这也很容易打破.nib必须知道app delegate类的名称,所以如果你不喜欢默认创建的那些有趣的长名字,你可以在更改它们时轻松搞砸所有内容.

然而,现在,app委托简单地命名为App Delegate,并且由UIApplicationMain()在代码中实例化,正如你所说的那样; 和一切其他代码作为直接后续完成的:应用程序的委托被实例化并didFinishLaunching叫,于是我们在代码中创建窗口,把它分配给我们的财产中的代码,加载笔尖,如果有一个代码,在代码中设置窗口的rootViewController,并像以前一样在代码中显示接口.

因此,引导直接暴露给视图,因为它是所有代码.这使得更容易理解和修改而不会破坏任何东西.这几乎就像以前的模板设计师只是在炫耀可以在幕后神奇地自动发生多少东西; 现在一切都在公开,明确地发生.