【问题标题】:SpriteKit - CPU/Memory leak on segue back to main screenSpriteKit - segue 回到主屏幕时的 CPU/内存泄漏
【发布时间】:2014-05-27 20:11:08
【问题描述】:
我有一个应用程序,其中有一个 SpriteKit 游戏和一个主菜单。单击主页按钮后,CPU/内存不会减少。我已经尝试了一些东西,这里的代码可能是多余的,但它还没有为我工作。
每当触摸主页按钮时执行:
- (void)goToMainMenu {
[self performSegueWithIdentifier:@"mainmenu" sender:self];
[self.spriteView removeFromSuperview];
self.scene = nil;
[self.spriteView presentScene:nil];
self.spriteView = nil;
self.view = nil;
}
从主菜单返回游戏时,CPU/内存只会上升。
【问题讨论】:
标签:
ios
objective-c
cocoa
memory-leaks
sprite-kit
【解决方案1】:
您不想从主屏幕切换到应用程序,然后再次切换到主屏幕。您将有两个主屏幕实例。如果你继续玩游戏,你也会有两个例子。并且每次您使用循环系列的 segue 时,您最终都会得到更多重复的实例。
您应该使用“unwind”segue(参见 this answer,例如 unwind segue)或使用 popViewControllerAnimated 或 dismissViewControllerAnimated,具体取决于您是推送还是呈现给游戏视图控制器。这就是您返回到主屏幕的原始实例的方式,而不是创建一个新实例。
【讨论】:
-
-
@user3477144 如果你从mainmenu推送/呈现到你的游戏场景,然后从游戏场景推送/呈现回mainmenu,你肯定会泄漏(技术上,“放弃“ 记忆)。但是,如果您修复了该问题并且仍在泄漏,那么您可能会遇到其他问题(强参考周期等)。请参阅WWDC 2013 video“修复内存问题”,或者更好的是WWDC 2012 video“iOS 应用性能:内存”。