Memory leaks 使用GameplayKit中的GKStateMachine泄漏
我的机器有泄漏问题。 我的应用程序是一个非常简单的代码来测试这个问题。这是游戏场景:Memory leaks 使用GameplayKit中的GKStateMachine泄漏,memory-leaks,sprite-kit,swift3,xcode8,gameplay-kit,Memory Leaks,Sprite Kit,Swift3,Xcode8,Gameplay Kit,我的机器有泄漏问题。 我的应用程序是一个非常简单的代码来测试这个问题。这是游戏场景: import SpriteKit import GameplayKit class GameScene: SKScene { lazy var gameState:GKStateMachine = GKStateMachine(states: [Introduction(scene: self)]) override func didMove(to view: SKView) {
import SpriteKit
import GameplayKit
class GameScene: SKScene {
lazy var gameState:GKStateMachine = GKStateMachine(states: [Introduction(scene: self)])
override func didMove(to view: SKView) {
self.gameState.enter(Introduction.self)
}
}
这是我的状态:
import SpriteKit
import GameplayKit
class Introduction: GKState {
unowned let scene:GameScene
init(scene:SKScene) {
self.scene = scene as! GameScene
super.init()
}
override func didEnter(from previousState: GKState?) {
print("INSIDE THE Introduction STATE")
}
}
问题是,当我运行泄漏调试器时,我一进入状态就收到一个泄漏。有人吗
有什么建议吗?您可以简化构造函数以避免类型转换
init(scene: GameScene) {
self.scene = scene
super.init()
}
这究竟是如何回答这个问题的?OP问到了泄漏……这只是一个建议,因为类型转换是不必要的。我知道……但这应该是一个注释;)此外,init可能更短,因为您可以删除super.init()。由于它是超类中唯一的初始值设定项(单个指定的初始值设定项),并且没有参数,因此将自动调用它。这与问题无关,但无论如何,感谢您的建议。请尝试在简介类中使用
弱var scene:GameSecene?
。这样可以消除泄漏。尽管如此,我还没有找到真正的原因。有一个swift\u unknownedinit
呼叫可以在仪器中看到。。。我没有心情去研究Swift的源代码,去挖掘幕后的情况:)否则,你的代码看起来不错。如果GameSecene
同时解除分配(例如,当转换到下一个场景时),场景和简介实例将正确解除分配(简介实例由于无主
关键字使用而无法保留场景)。这似乎起到了作用。非常感谢。现在我将尝试我的原始代码。我最初发现问题的地方。它在我的原始代码中不起作用。有些事情真的很奇怪。根据每个网站,我做的一切都是它应该做的。不过,目前还没有一个确定的解决方案,它在我的原始代码中起作用。我只是忘了对其他州做同样的调整。如果一切都发生了变化,我会告诉你。@fluity可能每次的原因都不一样,但我想主要是因为我没有时间写一个完整的答案,或者我知道这个问题已经有了答案,或者我正在用一个设备写。。。有时我只是懒呵呵:)我也回答了很多SpriteKit的问题,所以我不想一遍又一遍地写东西。。。你为什么这么问?:)