假设我从XCode4中的模板创建了一个基于导航的应用程序,那么MainWindow.xib中将会有一个导航控制器,它具有RootViewController的子项。
何时会:
特别是当与applicationDelegate“didFinishLaunchingWithOptions”方法的时间相关时以及何时发生。
答案 0 :(得分:4)
如plist中所示,MainWindow是主nib文件基本名称。因此,有一些隐藏的代码将基于plist生成,以在启动时加载主窗口nib文件。这发生在didFinishLaunchingWithOptions之前。
只要加载了MainWindow笔尖,就会有一系列在后台完成的事情,请参阅资源编程指南中的The Nib Object Life Cycle。
其中一个步骤是
它取消归档nib对象图 数据并实例化对象。
然后几乎终于做到了:
它发送一个awakeFromNib消息 笔尖中的适当对象 定义匹配的文件 选择: ... 在iOS中,此消息仅发送给 接口对象 由nib加载代码实例化。 它不会发送给文件所有者,第一 响应者或任何其他代理对象。
您可以抓住的第一种方法是awakeFromNib
。
回答你的三个问题:
答案 1 :(得分:1)
所有这些都将在代码到达application:didFinishLaunchingWithOptions:
之前完成。 UIApplicationMain()
函数(从应用程序的main()
函数调用)加载MainWindow.nib。加载NIB文件时,NIB文件中的所有对象都会被实例化,并且对象之间的连接也会生成。
请注意,这意味着视图控制器本身已存在于application: didFinishLaunchingWithOptions:
中。视图控制器的视图也不是这样。视图控制器在第一次访问时加载其视图。