Swift - 在segue

时间:2016-07-08 06:24:01

标签: swift memory-management uiviewcontroller uinavigationcontroller skscene

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

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

Main.storyboard

我的根视图控制器是菜单视图控制器。我首先在标题视图控制器中启动,然后转到菜单视图控制器,然后从游戏视图控制器进行切换,但这显然不会释放我的任何内存。

我的segues是在SKScenes内使用以下内容完成的:

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

其中viewController是引用其父视图控制器的SKScene中的var。

有什么我可以试着让我的流程能够解决问题吗?我只是希望能够遍历登录和服务器连接的标题场景,然后在菜单场景和某种游戏场景之间切换剩余的时间。

我试图实现一些建议,例如dismissViewControllerAnimated(true, completion: nil),但它们似乎都没有实际解除分配任何东西。在菜单场景和游戏场景之间仅2-3个循环后,游戏就会慢慢爬行。

我见过很多类似的问题,但到目前为止我还没有找到适合我的解决方案。我正在用Swift和Xcode 7.3.1编写游戏。

2 个答案:

答案 0 :(得分:2)

我解决了我的问题。我最终得到了很多关于各种事物的强引用,比如我的视图,场景和视图控制器。我总共有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?

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

答案 1 :(得分:0)

因此,您已经了解了许多不同的方法,但大多数方法并不适合您和/或使用不当。

您的应用中现在有一个未使用的导航控制器。一般情况下,我会使用导航控制器,但应将其标记为初始视图控制器,并且您当前的初始视图控制器应该是导航控制器根视图控制器。

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

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

相关问题