2011-04-23 63 views
2

假設我從XCode4中的模板創建了一個基於導航的應用程序,那麼在MainWindow.xib中將會有一個導航控制器,該控制器具有作爲RootViewController的子項。什麼時候界面生成器項目得到實例化?

究竟何時再:

  1. RootViewController的的實例創建?
  2. 此實例作爲兒童與導航控制器關聯?

特別是當涉及applicationDelegate「didFinishLaunchingWithOptions」方法的時間和發生時。

回答

4

如在plist中給出的,MainWindow是主要的nib文件庫所以有一些隱藏的代碼會在啓動時根據plist生成加載主窗口nib文件,這發生在didFinishLaunchingWithOptions之前

一旦加載了MainWindow nib,就會在後臺完成一連串的事情,請參考資源編程指南中的The Nib Object Life Cycle

其中的一個步驟是

它解檔筆尖對象圖 數據和實例化的對象。

然後幾乎最後它的作用:

它發送一個awakeFromNib消息 在筆尖 文件定義匹配 選擇適當的對象: ... 在iOS中,該消息僅發送到 接口對象 由nib加載代碼實例化。 它不會發送給文件所有者,第一個 響應程序或任何其他代理對象。

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

要回答你的三個問題:

  1. 在MainWindo筆尖文件的載入
  2. 是的,有在Interface Builder看看筆尖文件
  3. 這一切都didFinishLaunchingWithOptions之前發生
1

在代碼到達application:didFinishLaunchingWithOptions:之前將完成的所有操作。 UIApplicationMain()函數(從您的應用程序的main()調用的函數加載MainWindow.nib。加載NIB文件時,將實例化NIB文件中的所有對象,並創建對象之間的連接。視圖控制器本身已經存在於application: didFinishLaunchingWithOptions:中,對於視圖控制器的視圖來說也是如此,視圖控制器在第一次訪問時懶惰地加載其視圖