在我的GameViewController中,我有这个代码初始化游戏:
scnView = SCNView(frame: self.view.frame)
scnView.backgroundColor = UIColor(red: 100.0/255.0, green: 149.0/255.0, blue: 237.0/255.0, alpha: 1.0)
scnView.showsStatistics = true
scnView.antialiasingMode = SCNAntialiasingMode.Multisampling2X
scnView.overlaySKScene = SKScene(size: self.view.bounds.size)
scnView.playing = true
self.view.addSubview(scnView)
self.view.sendSubviewToBack(scnView)
// Set up the scene
let scene = GameScene(view: scnView, delegate: self)
scene.rootNode.hidden = true
scene.physicsWorld.contactDelegate = scene
// start playing the scene
scnView.scene = scene
scnView.delegate = scene
scnView.scene!.rootNode.hidden = false
scnView.play(self)
它设置场景和环境。当我调用它时,内存使用量达到40MB并保持不变。当我结束游戏时,我运行此代码:
self.scnView.removeFromSuperview()
self.scnView = nil
self.initializeGame()
我删除视图并从头开始重新启动游戏。然而,内存分配增加到70MB并且越多,我就越多。我尝试在GameControllerView中移动我的.dae文件分配,以便只调用一次代码:
static let HomeLifeguard_1 = SCNScene(named: String(format: "assets.scnassets/Models/HomeLifeguard_1.dae"))
我尝试使用deinit {}并将我的大多数变量设置为nil,但没有任何变化。我不明白什么是记忆。不应该scnView = nil自动释放内存吗?
答案 0 :(得分:1)
我也遇到相同的情况,并且找到了解决该错误的解决方案。您必须异步删除和释放scnView。只需看下面的代码即可。
_scnView.antialiasingMode = SCNAntialiasingModeNone;
__block SCNView *strongScnView = _scnView;
_scnView = nil;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[strongScnView setScene:nil];
[strongScnView removeFromSuperview];
[strongScnView stop:nil];
strongScnView = nil;
});