在子类中使用GKStateMachine泄漏

我会告诉你我的实际代码。 它有三个要素:帮手:

import SpriteKit import GameplayKit class GameSceneHelper: SKScene { override func didMove(to view: SKView) { } } 

具有某些游戏状态的助手的子类:

 import SpriteKit import GameplayKit class GameScene: GameSceneHelper { lazy var gameState:GKStateMachine = GKStateMachine(states: [ Introduction(scene: self), SecondState(scene: self) ]) override func didMove(to view: SKView) { self.gameState.enter(Introduction.self) } } 

和国家。 在这里,我介绍其中之一。 另一个具有相同的结构:

 import SpriteKit import GameplayKit class Introduction: GKState { weak var scene:GameScene? init(scene:SKScene) { self.scene = scene as? GameScene super.init() } override func didEnter(from previousState: GKState?) { print("INSIDE THE Introduction STATE") } } 

问题是当我在GameSceneHelper的子类中定义gameStatevariables时,我得到一个泄漏。 但是,如果我不使用子类,而是使GameScene成为SKScene的直接子类,则一切正常。 问题是,对于我的项目,我需要帮手,所以我不能把它拿出来。 有人有什么build议吗?

好。 经过很多时间,我发现问题的根源。 gameState的声明必须像这样从GameScene移动到GameSceneHelper

 class GameSceneHelper: SKScene { var gameState:GKStateMachine! override func didMove(to view: SKView) { } } 

GameScene内部没有使用惰性的var声明。 然后一切正常。