【发布时间】:2014-12-12 02:37:17
【问题描述】:
我有一个带有菜单场景和游戏场景的简单游戏。游戏场景结束后,返回菜单场景,然后进入游戏场景,以此类推。
所有转换都使用self.view?.presentScene(Scene(size: self.view!.bounds.size)) 处理。
我还在 MenuScene 和 GameScene 中添加了这段代码:
override func willMoveFromView(view: SKView) {
self.removeAllActions()
self.removeAllChildren()
}
但是,使用分析工具“Allocations”和“Leaks”,我意识到在每个presentScene 之后内存消耗都在不断增长(尽管只是一点点)。没有“泄漏”检测。
removeAllChildren 是否传播到节点内的所有节点?还是我应该手动删除 children 中的所有子项?
注意:我使用的是 XCode 6.1.1,iPhone 模拟器 iOS 8.1
【问题讨论】:
-
分配给添加到场景的节点的内存应该在您转换到新场景时自动释放,除非有对场景或节点的引用。
-
您不需要自己调用这两个 removeAll* 函数中的任何一个。如果您的代码的内存管理正确,Sprite Kit 将正确清理场景。您这样做的事实只是您希望它能在其他地方解决您的记忆问题。寻找实际问题,例如场景仍然被强引用(即,您可能已将其添加到数组或单例属性中)或任何导致保留周期的节点(即兄弟节点相互强引用或它们的父节点是肯定的方法创建一个保留周期)。运行分析构建以获取一些指针。
标签: ios memory-management swift sprite-kit skscene