gpt4 book ai didi

ios - 在 Swift 中,如何在删除 ARSCNView 后让内存恢复正常?建筑套件

转载 作者:行者123 更新时间:2023-11-28 14:06:04 24 4
gpt4 key购买 nike

我在 ARKit 中创建了游戏,但每次运行游戏时内存使用量都会增加。所以在玩了几次之后游戏崩溃了。我有 3 个 Controller 。

View Controller

第一 Controller -> 第二 Controller -> 第三 Controller

FirstController 是应用启动的地方。 FirstController 在 ARKit 中成功扫描二维图像后调用 SecondController。在 SecondController 里面我有我的 ARKit 游戏。最后一个ThirdController 用于显示Score。它也有重播按钮。 (这是对 SecondController 的一个 segue)

    class SecondController: UIViewController, ARSCNViewDelegate, SCNPhysicsContactDelegate {
weak var scnScene: SCNScene!
@IBOutlet weak var sceneView: ARSCNView!

override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self
sceneView.scene.physicsWorld.contactDelegate = self
sceneView.autoenablesDefaultLighting = true;
runStartTimer()
startGame()
}
func gameOver() {
let defaults = UserDefaults.standard
defaults.set(score, forKey: "score")
DispatchQueue.main.async {
self.sceneView.scene.rootNode.enumerateChildNodes { (node, stop) in
node.geometry?.materials.first?.diffuse.contents = nil
node.geometry = nil
node.removeFromParentNode()
print("Object Deallocated =)")

}
self.performSegue(withIdentifier: "gameCompleted2", sender: self)

}
}
}

我使用 segue 从一个 View 移动到另一个 View 例如:

self.performSegue(withIdentifier: "gameCompleted2", sender: self)

我也试过使用 DEINIT ,但它没有帮助

最佳答案

好的,既然你评论说你的 View Controller 在导航 Controller 内,这就是我假设正在发生的事情:

NavigationStack: [FirstViewController, SecondViewController]
*segue to ThirdViewController*
NavigationStack: [FirstViewController, SecondViewController, ThirdViewController]
*segue to SecondViewController*
NavigationStack: [FirstViewController, SecondViewController, ThirdViewController, SecondViewController]
*segue to ThirdViewController*
NavigationStack: [FirstViewController, SecondViewController, ThirdViewController, SecondViewController, ThirdViewController]

依此类推,递归地将 View Controller 放置在彼此之上。您可以通过打印 navigationController.viewControllers 来测试它。

防止这种情况发生的一个简单方法是模态显示您的 ThirdViewController 并关闭它,而不是继续到 SecondViewController。

如果你想让你的动画和现在一样,那么也许可以编辑 navigationController.viewControllers 来删除你刚刚展示的类型的项目。

关于ios - 在 Swift 中,如何在删除 ARSCNView 后让内存恢复正常?建筑套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52963359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com