2016-01-11 53 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

你说得对。当呈现像您所描述的视图控制器时,您正在构建一个堆栈。如果您不再需要模式视图控制器,请将其解除。如果窗口的根控制器需要换出另一个控制器,则分配一个新控制器并让旧控制器死掉。一如既往,小心强大的参考!