【问题标题】:when exactly do Interface Builder items get instantiated?Interface Builder 项目何时被实例化?
【发布时间】:2011-08-11 11:08:30
【问题描述】:

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

那么具体什么时候:

  1. 要创建 RootViewController 的实例吗?
  2. 此实例是否作为子级与导航控制器相关联?

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

【问题讨论】:

    标签: iphone ios uinavigationcontroller xcode4 rootview


    【解决方案1】:

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

    加载 MainWindow nib 后,会在后台执行一系列操作,请参阅资源编程指南中的 The Nib Object Life Cycle

    其中一个步骤是

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

    然后几乎终于做到了:

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

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

    回答你的三个问题:

    1. 在加载 MainWindo nib 文件期间
    2. 是的,看看界面生成器中的 nib 文件
    3. 这一切都发生在 didFinishLaunchingWithOptions 之前

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2010-10-31
        • 2013-08-25
        • 1970-01-01
        • 1970-01-01
        • 2011-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多