0

對於由導航控制器推送的控制器,如果在其所需的init方法中創建推送的控制器視圖的詳細信息,我的理解是如果視圖因爲它屏幕外(例如由於內存不足),因爲init僅在加載視圖控制器時調用一次,並且隨後的推送可能不顯示任何內容,您可能再也不會看到它。在推送視圖控制器中查看自定義

這個視圖設置好像是在viewDidLoadviewWillAppear這樣更好的地方,如果控制器需要在下次推動視圖時創建視圖,它將被正確地重新創建。

然而,我看到的教程往往把推視圖控制器的視圖設置在其init方法;這有多重要?

回答

3

視圖設置應該在viewDidLoad(或者如果您不使用筆尖時在loadView中)完成,因爲您正在描述的原因。如果您需要知道控制器的頂級視圖尺寸以設置子視圖,請在viewWillAppear:中執行。

通常情況下,一個彈出的視圖控制器會立即解除分配;如果應用程序需要稍後顯示相同的視圖,它會爲它創建一個新的視圖控制器。所以在這種情況下,應用程序不會顯示「無」。

如果應用程序在第一個視圖控制器的頂部推送或呈現另一個視圖控制器,則可以卸載第一個視圖控制器的視圖。如果應用程序從來沒有將第二個視圖控制器推送或呈現在第一個視圖控制器上,則直到彈出控制器時才能卸載第一個視圖控制器的視圖,此時(在大多數應用程序中)控制器無論如何都會被解除分配。所以在這種情況下,在init中設置視圖不會造成麻煩。

但是,在init中設置視圖仍然是一個糟糕的設計。您稍後可能會更改您的應用程序以推送或呈現第二個視圖控制器,從而產生意外的不安全行爲。

另外,創建一個視圖控制器,在其上設置屬性,然後推送它是很常見的。如果屬性影響控制器的視圖層次結構,那麼init設置視圖還爲時尚早。

+0

非常明確,樂於助人,謝謝 – johnbakers

相關問題