Ios 在ViewController之间切换后CPU和内存被消耗的问题

Ios 在ViewController之间切换后CPU和内存被消耗的问题,ios,objective-c,swift,sprite-kit,Ios,Objective C,Swift,Sprite Kit,我有一个问题,使用我的segue去两个不同的场景之间的碰撞 我的代码当前将等待精灵碰撞,然后将运行: func gameOver() { performSegueWithIdentifier("gameOver", sender: nil) } 可以看出,它对gameOver场景执行segue模式,这是一个带有UIImageView和重试按钮的ViewController,然后使用模式segue返回GameViewController,我的游戏再次运行,直到发生冲突 问题是,每次检测到

我有一个问题,使用我的segue去两个不同的场景之间的碰撞

我的代码当前将等待精灵碰撞,然后将运行:

func gameOver() {
    performSegueWithIdentifier("gameOver", sender: nil)
}
可以看出,它对gameOver场景执行segue模式,这是一个带有UIImageView和重试按钮的ViewController,然后使用模式segue返回GameViewController,我的游戏再次运行,直到发生冲突

问题是,每次检测到冲突并单击“重试”时,我都会看到监视器上的内存和CPU越来越多。在大约8-10次重试后,我还看到约30FPS的损失

我的碰撞功能是:

func collision(Bee:SKSpriteNode, Player:SKSpriteNode) {
    scene?.paused = true
    println("HIT")
    self.viewController.gameOver()
} 

我相信问题可能与场景有关?.paused=true,但我已经尝试了所有方法,无法找到正确的方法在检测到碰撞时关闭场景,并在按下重试时重新启动整个游戏

你说你在使用模态segue返回到一个新游戏?我认为问题在于你将要创建一个新版本的游戏控制器。这就是为什么你的记忆力在提高。每次都会添加一个新的游戏控制器

当重试被点击时,为什么不关闭重试控制器,使其显示原始游戏屏幕呢

因此,要么关闭重试控制器,要么使用反向分段,这是向后分段的机制

在重试按钮的操作中,只需添加:

[self dismissViewControllerAnimated:YES completion:nil];

你需要在游戏结束时使计时器失效,这将停止计时器

nametimer.invalidate()

好的,我试试这个!这似乎是在objective-c中,而不是在swift中,对吗?在斯威夫特我该怎么做?如果我关闭重试控制器,我如何重新启动gameController使游戏真正重新启动?我想它会关闭我所处的视图,并返回到游戏本身的冲突状态。dismissViewControllerAnimatedtrue,completion:无谢谢,我在你发布之前就知道了。正如预期的那样,游戏现在刚刚从冲突的地方开始。所有对象也已停止移动。你知道我如何“重新启动”游戏场景吗?我会在ViewDidDisplay中添加一些代码。当视图控制器作为主视图返回时,将调用此函数。在那里重新开始游戏。注意:当控制器第一次出现时,它也会被调用。作为猜测,调用:scene?.paused=false。不知道你的代码是如何工作的。我想我回答了问题8^。你现在开始面对新的问题。