所以我正在使用SceneKit在iOS上处理3D应用程序。一切都很好,直到我开始实现更大和更多的文件。现在,每隔4-5次我从主视图控制器重新启动场景就会崩溃。经过几次测试后,我发现重启几次后内存太满了。 (是的,需要重新启动才能从一个3D文件转换到另一个3D文件)所以即时启动我的场景,之后即包括我的referenceNode和显示的模型。
场景开始时:
if let filePath = Bundle.main.path(forResource: "compressed", ofType: "dae", inDirectory: "models.scnassets") {
let referenceURL = NSURL(fileURLWithPath: filePath)
if #available(iOS 9.0, *) {
referenceNode = SCNReferenceNode(url: referenceURL as URL)!
referenceNode.position = SCNVector3(x: 0, y:0, z:0)
referenceNode.load()
gameScene.rootNode.addChildNode(referenceNode)
}
}
当我退出场景并尝试卸载每个节点时:
gameScene.rootNode.enumerateChildNodes { (node, stop) -> Void in
node.geometry = nil // tried didnt change anything.
node.removeFromParentNode()
}
referenceNode.removeFromParentNode()
referenceNode.unload()
我尝试过我在网上看到的其他解决方案,告诉我使用:
node.geometry!.firstMaterial?.normal.contents = nil
node.geometry!.firstMaterial?.diffuse.contents = nil
让我回复:
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
我现在几乎没有想法了。此外,如果我在重新加载场景后检查现有节点,则返回没有。那么有谁知道我怎么能够从内存中获取这些文件?