什么时候Interface Builder项目得到实例化?

时间:2011-04-23 11:49:30

标签: iphone ios uinavigationcontroller xcode4 rootview

假设我从XCode4中的模板创建了一个基于导航的应用程序,那么MainWindow.xib中将会有一个导航控制器,它具有RootViewController的子项。

何时会:

  1. 是否创建了RootViewController的实例?
  2. 此实例与导航控制器的子项关联?
  3. 特别是当与applicationDelegate“didFinishLaunchingWithOptions”方法的时间相关时以及何时发生。

2 个答案:

答案 0 :(得分:4)

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

只要加载了MainWindow笔尖,就会有一系列在后台完成的事情,请参阅资源编程指南中的The Nib Object Life Cycle

其中一个步骤是

  

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

然后几乎终于做到了:

  

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

您可以抓住的第一种方法是awakeFromNib

回答你的三个问题:

  1. 加载MainWindo nib文件
  2. 期间
  3. 是的,请查看界面构建器
  4. 中的nib文件
  5. 这一切都发生在didFinishLaunchingWithOptions
  6. 之前

答案 1 :(得分:1)

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

请注意,这意味着视图控制器本身已存在于application: didFinishLaunchingWithOptions:中。视图控制器的视图也不是这样。视图控制器在第一次访问时加载其视图。