确保 nib 中的对象在 applicationDidFinishLaunching 之前初始化

Posted

技术标签:

【中文标题】确保 nib 中的对象在 applicationDidFinishLaunching 之前初始化【英文标题】:Making sure that objects in nibs are initialized before applicationDidFinishLaunching 【发布时间】:2010-06-29 20:21:21 【问题描述】:

感谢您查看我的问题。

我的应用中有两个视图控制器,每个控制器都有自己的 nib 文件。控制器 1 的实例存储在 MainWindow.xib 中,控制器 2 的实例存储在 Controller1.xib 中。

有没有办法确保在发送应用程序委托之前初始化控制器 2 applicationDiDFinishLaunching?

对于许多其他视图控制器,实际设置要复杂得多,所以我真的不想将所有内容都放入 MainWindow.xib。加上这样做会降低可重用性。

再次感谢!

【问题讨论】:

【参考方案1】:

有没有办法确保在发送应用委托之前初始化控制器 2 applicationDiDFinishLaunching

没有。好吧,也许是的,但这不是视图控制器应该如何工作的。视图控制器用于延迟 nib 的加载,这是一项相当昂贵的操作,直到视图真的非常需要。因此,如果您在调用 applicationDidFinishLaunching 时需要 controller2,则不应将其放在由另一个视图控制器控制的 nib 中。

如果我是你,我会完全停止在 nib 文件中实例化视图控制器,而只是在 applicationDidFinishLaunching: 中创建它们,就像在

-(void)applicationDidFinishLaunching:(UIApplication *)application

     ....
     self.controller2=[[Controller2 alloc] init... ];
     ....

【讨论】:

【参考方案2】:

我相信applicationDidFinishLaunching 是您可以控制代码的绝对入口点。这可能是最早加载任何东西的地方。

【讨论】:

以上是关于确保 nib 中的对象在 applicationDidFinishLaunching 之前初始化的主要内容,如果未能解决你的问题,请参考以下文章

NIB 中的导航项始终为零

nib 中的 UIView 在 iPad 上是 nil,在 iPhone 上不是 nil

Cocoa - 如何以编程方式初始化视图?

从 Cocoa 中的其他 nib(即 Interface Builder)加载 nib

如何在 nib 中传递对对象的 init 方法的引用?

nib 文件中的 uiviewcontroller