Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory leaks 使用GameplayKit中的GKStateMachine泄漏_Memory Leaks_Sprite Kit_Swift3_Xcode8_Gameplay Kit - Fatal编程技术网

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的问题,所以我不想一遍又一遍地写东西。。。你为什么这么问?:)