在swift中,如何在删除SKScene后让内存恢复正常?

在swift中,如何在删除SKScene后让内存恢复正常?,第1张

概述我用SpriteKit创建了一个简单的游戏,但每次运行游戏时,模拟器中的内存使用量增加约30mb,但游戏结束后永远不会减少. 当我运行游戏超过十次时,模拟器变得越来越慢并最终崩溃. 在这个简单的游戏中我有两个控制器和一个gamecene: MainController通过触发按钮调用GameViewController 在GameViewController中,gamescene以这种方式初始化: 我用SpriteKit创建了一个简单的游戏,但每次运行游戏时,模拟器中的内存使用量增加约30mb,但游戏结束后永远不会减少.

当我运行游戏超过十次时,模拟器变得越来越慢并最终崩溃.

在这个简单的游戏中我有两个控制器和一个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后让内存恢复正常?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1048352.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存