当我运行游戏超过十次时,模拟器变得越来越慢并最终崩溃.
在这个简单的游戏中我有两个控制器和一个gamecene:
MainController通过触发按钮调用GameVIEwController
在GameVIEwController中,gamescene以这种方式初始化:
class GameVIEwController: UIVIEwController{ var skVIEw:SKVIEw! var scene:GameScene! overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad() scene = GameScene(size: vIEw.bounds.size) skVIEw = vIEw as SKVIEw skVIEw.ignoresSiblingOrder = true scene.scaleMode = .Resizefill scene.vIEwController = self skVIEw.presentScene(scene) }//with a prepareForSegue deinitialises the scene and skvIEw:overrIDe func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject?) { if segue.IDentifIEr == "GameFinished"{ scene.removeAllActions() scene.removeAllChildren() scene.removeFromParent() scene = nil skVIEw.presentScene(nil) skVIEw = nil let target = segue.destinationVIEwController as MainController } }}
在GameScene中,vIEwController是一个属性
var vIEwController:GameVIEwController? = GameVIEwController()
segue被触发:
self.vIEwController!.performSegueWithIDentifIEr("GameFinished",sender: nil)
我也试过在GameScene中将remove方法放入deinit:
deinit{ self.removeAllActions() self.removeAllChildren() }
仍然行不通
您的GameVIEwController强烈引用您的GameScene.而你的GameScene对你的GameVIEwController有很强的参考价值.这导致强大的参考周期,这意味着两个对象都不会被释放.您需要将GameScene中的vIEwController属性声明为弱.
weak var vIEwController:GameVIEwController? = GameVIEwController()总结
以上是内存溢出为你收集整理的在swift中,如何在删除SKScene后让内存恢复正常?全部内容,希望文章能够帮你解决在swift中,如何在删除SKScene后让内存恢复正常?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)