presentViewController会导致内存耗尽吗?

3

有一些我误解的地方。我目前正在使用Swift开发一个应用程序。为了简化多个开发人员一起工作,该项目被分割成多个故事板。当应用程序启动时,我们使用App Delegate来确定是否呈现教程。

无论选择哪个视图,我们都会实例化storyboard,然后像下面这样实例化初始视图控制器:

// 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或返回到先前的视图控制器,因此它可以被关闭。有没有更好的方法在不创建堆栈的情况下完成这个任务?我担心这个堆栈会浪费内存。我可能可以通过故事板引用使转场实现,但我不知道这是否会产生同样的问题。


当你说你“使用相同的代码”时,你是重新创建窗口,还是仅仅在教程之上呈现主视图控制器?如果是后者,为什么不简单地弹出当前的(教程),然后呈现主要内容? - Craig Otis
我们获取另一个故事板(第2行),然后从该故事板中获取视图控制器(第3行)。然后,我们使用presentViewController来呈现新的视图控制器。现在你这么说,我感觉很愚蠢。如果我不想构建一个控制器堆栈,我可以调用dismissViewController,然后立即调用presentView来显示新的视图控制器吗?我一直认为这样会短暂地显示一个空白屏幕,而新的视图控制器则会随后呈现。 - JT Bergman
它可能会显示一个白屏 - 你可能想要测试一下,看看会发生什么。或者首先呈现一个包含背景颜色或图像的空/单视图控制器,并始终将其保持在堆栈底部,在其上方交换教程/主控制器。 - Craig Otis
1个回答

0

你说得对。像你描述的那样呈现视图控制器时,你正在构建一个堆栈。如果不再需要模态视图控制器,请将其解除。如果窗口的根控制器需要被替换为另一个控制器,请分配一个新的控制器并让旧的控制器消失。一如既往,要注意强引用!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接