Chris Hutchison Chris Hutchison - 2 months ago 7
iOS Question

Does a scene have to be removed when changing scenes?

In sprite-kit I'm making a game that includes various levels in different scenes. Im curious if just transitioning to a scene will remove the other scene or will they continue to pile up and take up cpu usage? I'm transitioning them all in this sort of fashion.

let reveal = SKTransition.fade(with: UIColor.white, duration: 1.5)
let scene = level2(size: self.size)
self.view?.presentScene(scene, transition:reveal)

Answer

Good practice #1

It's usually a good practice keeping only one scene in memory while your are executing your game.

Good practice #2

Another good practice is avoiding strong retaining reference loops. Specifically should not exist a descendant node of your scene with a strong reference to the scene itself.

presentScene

That said when you invoke

 self.view?.presentScene(scene, transition:reveal)

the strong reference from the SKView to the scene is removed. So, if you respected the 2 assumptions above, the scene will automatically be deinitialized and removed from memory.

Test

You can test it yourself. Just add this to your game scene

deinit {
    print("GameScene deinit")
}

This method is automatically invoked when the instance is deinitialized.

Now run

 self.view?.presentScene(scene, transition:reveal) 

and look for the "GameScene deinit" into the log.

Comments