2

假设我从 XCode4 中的模板创建了一个基于导航的应用程序,那么在 MainWindow.xib 中将有一个 Navigation Controller,它作为一个子节点具有 RootViewController。

那么究竟什么时候会:

  1. 创建 RootViewController 的实例?
  2. 这个实例作为一个孩子与导航控制器相关联吗?

特别是当涉及到 applicationDelegate “didFinishLaunchingWithOptions”方法的时间以及它发生的时间时。

4

2 回答 2

4

如 plist 中给出的 MainWindow 是主 nib 文件的基本名称。所以有一些隐藏代码将基于 plist 生成,以在启动时加载主窗口 nib 文件。这发生在 didFinishLaunchingWithOptions 之前。

加载 MainWindow nib 后,会在后台执行一系列操作,请参阅资源编程指南中的 Nib 对象生命周期

其中一个步骤是

它取消归档 nib 对象图数据并实例化对象。

然后几乎终于做到了:

它向 nib 文件中定义匹配选择器的适当对象发送 awakeFromNib 消息: ... 在 iOS 中,此消息仅发送到由 nib 加载代码实例化的接口对象。它不会发送给文件所有者、第一响应者或任何其他代理对象。

您可以掌握的第一种方法是awakeFromNib.

回答你的三个问题:

  1. 在加载 MainWindo nib 文件期间
  2. 是的,查看界面生成器中的 nib 文件
  3. 这一切都发生在 didFinishLaunchingWithOptions 之前
于 2011-04-23T12:10:44.287 回答
1

所有这些都将在代码到达之前完成application:didFinishLaunchingWithOptions:。该UIApplicationMain()函数(从您的应用程序的main()函数中调用会加载 MainWindow.nib。加载 NIB 文件时,NIB 文件中的所有对象都会被实例化并建立对象之间的连接。

请注意,这意味着视图控制器本身已经存在于application: didFinishLaunchingWithOptions:. 视图控制器的视图并非如此。视图控制器在第一次访问时会延迟加载其视图。

于 2011-04-23T12:00:36.087 回答