Swift - 在 segue 之后释放之前的视图控制器

Swift - Deallocate previous view controller after segue

我正在尝试找到一种正确的方法来处理我的游戏中的 scene/view 流程。我目前能够从主菜单转换到游戏级别,退出游戏级别并 return 到主菜单,但它不会从任何视图中释放任何内存。

我看到很多建议使用 UINavigationController 来处理我的视图控制器。尝试了一段时间后,我现在的故事板是这样的:

我的根视图控制器是菜单视图控制器。我首先从 Title View Controller 开始,转到 Menu View Controller,然后转到和离开 Game View Controller,但这显然没有释放我的任何内存。

我的转场是在 SKScenes 中使用以下方法完成的:

self.viewController?.performSegueWithIdentifier("segueName", sender: viewController)

其中 viewController 是 SKScene 中引用其 parent 视图控制器的变量。

有什么我可以尝试让我的流程顺利进行的吗?我只想能够遍历一个标题场景进行登录和服务器连接,然后把剩下的时间花在菜单场景和某种游戏场景之间切换。

我已尝试实施一些建议,例如 dismissViewControllerAnimated(true, completion: nil),但其中 none 似乎实际上是在取消分配任何内容。在菜单场景和游戏场景之间仅循环 2-3 次后,游戏速度变慢。

我见过不少与此类似的问题,但到目前为止,我一直无法提出适合我的解决方案。我正在 Swift 和 Xcode 7.3.1.

中编写游戏

所以您已经研究了多种不同的方法,但大多数都不适合您和/或应用不正确。

您的应用中现在有一个未使用的导航控制器。通常我会使用导航控制器,但它应该被标记为初始视图控制器,并且您当前的初始视图控制器应该是导航控制器根视图控制器。

一旦你有了它,你需要研究展开的 segues(或使用一些代码)。目前你只是一直在展示新的视图控制器实例,你永远不会回头。这就是您开始遇到问题的原因。您需要从游戏场景中放松到菜单,而不是显示新菜单。

这也可以通过告诉导航控制器从其堆栈中弹出顶视图控制器的代码来完成。

我解决了我的问题。我最终得到了一堆对各种事物的强烈引用,比如我的视图、场景和视图控制器。我总共有大约 200 个强引用,所以我有很多清理工作要做。

为了找到我的有力参考,我遵循了 Xcode 中关于如何使用分配工具的指南:https://www.raywenderlich.com/97886/instruments-tutorial-with-swift-getting-started

遇到同样问题的任何人,请查看此问题:In swift, how to get memory back to normal after an SKScene is removed?

这就是帮助我解决问题的原因。