假设我从 XCode4 中的模板创建了一个基于导航的应用程序,那么在 MainWindow.xib 中将有一个 Navigation Controller,它作为一个子节点具有 RootViewController。
那么究竟什么时候会:
- 创建 RootViewController 的实例?
- 这个实例作为一个孩子与导航控制器相关联吗?
特别是当涉及到 applicationDelegate “didFinishLaunchingWithOptions”方法的时间以及它发生的时间时。
假设我从 XCode4 中的模板创建了一个基于导航的应用程序,那么在 MainWindow.xib 中将有一个 Navigation Controller,它作为一个子节点具有 RootViewController。
那么究竟什么时候会:
特别是当涉及到 applicationDelegate “didFinishLaunchingWithOptions”方法的时间以及它发生的时间时。
如 plist 中给出的 MainWindow 是主 nib 文件的基本名称。所以有一些隐藏代码将基于 plist 生成,以在启动时加载主窗口 nib 文件。这发生在 didFinishLaunchingWithOptions 之前。
加载 MainWindow nib 后,会在后台执行一系列操作,请参阅资源编程指南中的 Nib 对象生命周期。
其中一个步骤是
它取消归档 nib 对象图数据并实例化对象。
然后几乎终于做到了:
它向 nib 文件中定义匹配选择器的适当对象发送 awakeFromNib 消息: ... 在 iOS 中,此消息仅发送到由 nib 加载代码实例化的接口对象。它不会发送给文件所有者、第一响应者或任何其他代理对象。
您可以掌握的第一种方法是awakeFromNib
.
回答你的三个问题:
所有这些都将在代码到达之前完成application:didFinishLaunchingWithOptions:
。该UIApplicationMain()
函数(从您的应用程序的main()
函数中调用会加载 MainWindow.nib。加载 NIB 文件时,NIB 文件中的所有对象都会被实例化并建立对象之间的连接。
请注意,这意味着视图控制器本身已经存在于application: didFinishLaunchingWithOptions:
. 视图控制器的视图并非如此。视图控制器在第一次访问时会延迟加载其视图。