У меня проблемы с утечкой с помощью GKStateMachine. Мое приложение - довольно простой код для проверки проблемы. Это GameScene:Утечки с использованием GKStateMachine в 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)
}
}
И это мое состояние:
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")
}
}
Проблема заключается в том, что, когда я бегу Утечки отладчик, я получил одну утечку, как только я вхожу в состояние. Есть ли у кого-нибудь предложение?
Попробуйте использовать «слабую сцену var: GameScene?» В классе введения. Это устраняет утечку. Тем не менее, я действительно не нашел реальной причины этого. Существует вызов 'swift_unknowUnownedInit', который можно увидеть в Инструментах ... И я не был в настроении смотреть в источник Swift, чтобы копать то, что происходит за кулисами :) В противном случае ваш код кажется хорошим. Если 'GameScene' освобождает (скажем, при переходе к следующей сцене), то сценарий и вводный экземпляр будут освобождены должным образом (экземпляр внедрения не сохраняет сцену из-за использования ключевого слова' unowned'). – Whirlwind
Кажется, что это работает. Спасибо. Теперь я собираюсь попробовать в своем исходном коде. Тот, на котором я впервые нашел проблему. – iOSTony
Он не работал с моим исходным кодом. Есть что-то действительно странное. Согласно каждому сайту, я делаю все как должен. Однако нет окончательного решения. – iOSTony