2012-04-08 152 views
2

當視圖控制器第一次實例化時,它通常會創建或加載它在其生命週期中所需的對象。它不應該創建 視圖或與顯示內容相關聯的對象。它應該將 重點放在實現其他關鍵行爲所需的數據對象和對象上。初始化視圖控制器

以上是從iOS參考:

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html#//apple_ref/doc/uid/TP40007457-CH10

的文檔接着描述與故事板的視圖載荷序列。

我的問題是:

由於視圖控制器將與筆尖文件,其中包含的視圖對象相關聯;其「viewDidLoad」方法似乎設計用於在加載時配置視圖對象。那麼我們應該如何文檔的建議:

「不應該創建顯示內容相關的意見或物品」

作何解釋?

問題1與我們是否使用Storyboard有關嗎?

回答

1

不知道我明白你的問題的權利,但這裏是我的解釋:

  1. init ialization和視圖創建兩個單獨的步驟。假設我有一個視圖控制器,其表格的編號爲IBOutlet,它應該顯示存儲在覈心數據中的配方列表。在我的初始化方法中,我會從CoreData獲取數據並將其存儲在數組或獲取的結果控制器中。我不需要餐桌,因此我不會爲self.view房產做任何事情(如果沒有視圖,則會調用viewDidLoad)。在viewDidLoad我呼籲[tableView reloadData]重繪單元格,以便它們顯示控制器初始化程序中創建的我的控制器中的數據。

  2. 我不認爲它是相關的,但故事板應該是你的視圖控制器替換單個文件的單獨筆尖的支架。

+0

感謝您的回答,@Eimantas。正如你所暗示的那樣,這些文檔可能意味着視圖對象是在視圖控制器加載之前在nib文件中創建的...... – Stanley 2012-04-08 11:29:20

+0

@Stanley當視圖控制器用nib實例化時,nib文件被解壓到內存中。在那裏,每個視圖都會調用'initWithCoder:'和'awakeFromNib'。然後,在所有插座和操作連接後,您將獲得viewDidLoad調用。 – Eimantas 2012-04-08 11:31:00

+0

感謝您的協助和詳細的回覆...... :) – Stanley 2012-04-08 11:36:51

1

您引用的聲明與移動設備限制和設計效率有很大關係。它並沒有特別涉及到故事板。

通過「實例化」,文檔意味着-(id)init;調用。發生這種情況時,控制器「準備關鍵數據,但不創建視圖」。這意味着控制器評估一個xib文件,並在初始化時構建視圖的內部分層表示。這一步只涉及RAM和CPU。

視圖控制器僅在將視圖推入導航控制器時才創建視圖,或查看過渡動畫(即viewDidLoad開始時)。這是因爲意見很昂貴。它涉及GPU和視頻RAM。視頻RAM比RAM更受限制,不需要顯示時創建視圖(VRAM中的後臺緩衝區)效率不高。

如果你看看你的項目,你應該發現一些視圖控制器正在初始化,但不是立即需要顯示。如果沒有這種設計,VRAM將無緣無故地耗盡。

+0

視圖控制器不會查看其筆尖或在init中對其進行評估。它在loadView中做到了。將視圖添加到可見窗口時發生數據到GPU的傳輸,這發生在viewDidLoad返回之後。 – 2012-04-08 14:50:49

+0

@robmayoff,感謝您的意見。所以一個視圖控制器在''init''中做的事情並不多。 – 2012-04-08 14:52:29

+0

謝謝,Shiming和rob,在你的回答和評論中詳細分析... – Stanley 2012-04-09 00:50:58

相關問題