Je rencontre des problèmes de fuite avec GKStateMachine. Mon App est un code assez direct pour tester le problème. Ceci est le GameScene:Fuites utilisant GKStateMachine dans GameplayKit
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)
}
}
Et voici mon état:
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")
}
}
Le problème est que quand je lance le débogueur Fuites, j'ai reçu une fuite dès que je rentre à l'Etat. Est-ce que quelqu'un a une suggestion?
Essayez d'utiliser 'scene var faible: GameScene?' Dans la classe Introduction. Cela supprime la fuite. Pourtant, je n'ai pas vraiment trouvé la vraie cause de cela. Il y a un appel 'swift_unknowUnownedInit' qui peut être vu dans Instruments ... Et je n'étais pas d'humeur à regarder dans Swift source pour creuser ce qui se passe dans les coulisses :) Sinon, votre code semble bon. Si 'GameScene' se désaffecte (par exemple lors de la transition vers la scène suivante), la scène et l'instance d'introduction seront désallouées correctement (l'instance d'introduction ne conserve pas la scène en raison de l'utilisation du mot clé' unowned'). – Whirlwind
Cela semble fonctionner. Je vous remercie. Maintenant, je vais essayer dans mon code d'origine. Celui où j'ai trouvé le problème au départ. – iOSTony
Cela n'a pas fonctionné sur mon code d'origine. Il y a quelque chose de vraiment étrange. Selon chaque site, je fais tout comme il se doit. Cependant, il n'y a pas de solution définitive. – iOSTony