Ho creato un gioco semplice con SpriteKit, tuttavia ogni volta che eseguo il gioco, l'utilizzo della memoria nel simulatore aumenta di circa 30 MB, ma non diminuisce mai quando il gioco è finito.In modo rapido, come riportare la memoria alla normalità dopo la rimozione di SKScene?
Quando eseguo il gioco più di dieci volte, il simulatore rallenta e rallenta.
In questo semplice gioco ho due controllori e un gamescene:
MainController chiama GameViewController tramite un pulsante innescato
In GameViewController, gamescene viene inizializzato in questo modo:
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
}
}
}
Nel GameScene, viewController è una proprietà
var viewController:GameViewController? = GameViewController()
la segue viene attivato con questo:
Ho anche provato a mettere rimuovere metodi in deinit in GameScene:
deinit{
self.removeAllActions()
self.removeAllChildren()
}
Ancora non funzionerebbe
Esegui strumenti e verifica la presenza di una perdita di memoria. https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/InstrumentsQuickStart/InstrumentsQuickStart.html – sangony
Ho avuto questo stesso problema non 30 minuti fa. Si è verificato che avevo una perdita di memoria, quindi ho impostato le proprietà di visualizzazione e di scena su deboli, rimosso il problema di perdita, ma non sono sicuro che sia il modo migliore per farlo. –