我正在构建一个使用Scenekit根据数据库返回的信息显示场景的应用程序。我用类函数创建了一个自定义类,该类创建了一个SCNNode,其中包含需要绘制的所有内容并将其返回到我的SCNView。在调用此函数之前,我删除了所有现有节点。一切正常,直到我需要再次调用它为止。删除旧的SCNNode之后创建新的SCNNode之前,不会释放内存。有没有在不使内存过载的情况下删除和替换SCNNode的标准方法?我是iOS开发人员的新手,之前从未真正做过图形处理。谢谢

最佳答案

我遇到了同样的问题,我的SceneKit应用程序泄漏了很多内存。如果在让Swift对其进行初始化之前将SCNNode属性设置为geometry,则释放了nil的内存。

这是一个如何实现它的示例:

class ViewController: UIViewController {
    @IBOutlet weak var sceneView: SCNView!
    var scene: SCNScene!

    // ...

    override func viewDidLoad() {
        super.viewDidLoad()
        scene = SCNScene()
        sceneView.scene = scene

        // ...
    }

    deinit {
        scene.rootNode.cleanup()
    }

    // ...
}

extension SCNNode {
    func cleanup() {
        for child in childNodes {
            child.cleanup()
        }
        geometry = nil
    }
}

关于ios - 创建新的SCNNode之前,删除SCNNode不会释放内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32997711/

10-12 14:39