SpriteKit がアトラスをメモリから解放する方法を理解するための簡単なプロジェクトを作成しました。画面がタップされるたびにアトラスが作成され、メモリにロードされます。アトラスへの唯一の参照は、以下のコードに表示されているものであり、var は非エスケープ関数内にあるため、強い参照を保持していないと思いました。私の目標は、メモリにロードされた以前のアトラスが最終的に解放されることでしたが、メモリが積み重なり、最終的にクラッシュします。
アトラスは一度だけ読み込まれることになっていることを理解しており、テクスチャが解放されない理由についてApple がここで ( Working with Sprites ) 作成している 3 つのポイントを理解しています。
なぜこれが当てはまるのか、誰かが理解するのを手伝ってくれますか?
class GameScene: SKScene {
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
var atlas:SKTextureAtlas? = SKTextureAtlas(named: "Title")
atlas?.preload {
atlas = nil
print("Loaded")
}
}
}