2016-01-11 78 views
3

我有些誤解。我目前正在使用Swift開發一款應用程序。爲了簡化多個開發人員的工作,該項目分爲多個故事板。當應用程序啓動時,我們使用應用程序委託來確定是否提供教程。無論選擇視圖請問presentViewController會導致內存耗盡?

,我們實例故事板,然後將初始視圖控制器像這樣:

// Show the Welcome Tutorial 
self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 

let initialStoryboard: UIStoryboard = UIStoryboard(name: "WelcomeTutorial", bundle: nil) 

let initialViewController: TutorialVC = initialStoryboard.instantiateViewControllerWithIdentifier("TutorialVC") as! TutorialVC 

self.window?.rootViewController = initialViewController 

self.window?.makeKeyAndVisible() 

然後,當我們要移動到一個不同的故事板,我們使用相同的代碼,但代替最後兩行與presentViewController。不過,據我瞭解,這是建立一個堆棧。我們永遠不會調用dismissViewController或返回到前一個視圖控制器,因此它可以被解僱。有沒有更好的方法來做到這一點,而不創建一個堆棧?我擔心堆棧正在浪費內存。我可能會讓segues與故事板引用一起工作,但我不知道這是否會造成同樣的問題。

+0

當你說你「使用相同的代碼」,你是否重新創建窗口,或者你是簡單地通過*教程提供主視圖控制器?如果後者,爲什麼不簡單地彈出當前(教程),然後呈現主? –

+0

我們得到另一個故事板(第2行),然後從該故事板獲取一個視圖控制器(第3行)。然後我們使用presentViewController來呈現新的。現在你說我感覺非常愚蠢。如果我不想構建一堆控制器,我可以調用dismissViewController,然後立即調用presentView來顯示新控件?我一直認爲這會在新的一個呈現時短暫顯示一個空白屏幕。 –

+0

它可能會顯示一個白色的屏幕 - 你可能會想測試它,看看會發生什麼。或者提供一個空白/單視圖控制器*首先*包含背景顏色或圖像,並始終將其保存在堆棧的底部,將教程/主控制器*交換到最上面*。 –

回答

0

你說得對。當呈現像您所描述的視圖控制器時,您正在構建一個堆棧。如果您不再需要模式視圖控制器,請將其解除。如果窗口的根控制器需要換出另一個控制器,則分配一個新控制器並讓舊控制器死掉。一如既往,小心強大的參考!