Fan*_*ang 12 memory sprite-kit skscene swift
我使用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
}
}
}
Run Code Online (Sandbox Code Playgroud)
在GameScene中,viewController是一个属性
var viewController:GameViewController? = GameViewController()
Run Code Online (Sandbox Code Playgroud)
segue被触发:
self.viewController!.performSegueWithIdentifier("GameFinished", sender: nil)
Run Code Online (Sandbox Code Playgroud)
我也试过在GameScene中将remove方法放入deinit:
deinit{
self.removeAllActions()
self.removeAllChildren()
}
Run Code Online (Sandbox Code Playgroud)
仍然行不通
你GameViewController
有很强的参考资料GameScene
.而你GameScene
的强烈参考你的GameViewController
.这导致强大的参考周期,这意味着两个对象都不会被释放.
你需要声明你的viewController属性GameScene
为弱.
weak var viewController:GameViewController? = GameViewController()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2573 次 |
最近记录: |