在创建新的SCNNode之前,删除SCNNode不会释放内存

Pau*_*ulB 5 memory ios scenekit swift scnnode

我正在构建一个应用程序,它使用Scenekit根据从数据库返回的信息显示场景.我创建了一个带有类func的自定义类,它创建了一个包含需要绘制的所有内容的SCNNode并将其返回给我的SCNView.在调用此函数之前,我删除任何现有节点.一切都很好,直到我需要第二次调用它.删除旧SCNNode后,在创建新内存之前不会释放内存.有没有标准的方法来删除和替换SCNNode而不会使内存过载?我是iOS开发人员的新手,之前从未真正做过图像.谢谢

Dan*_*son 7

我遇到了同样的问题,我的SceneKit应用程序泄漏了很多内存。SCNNode如果在让Swift对其进行初始化之前将的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
    }
}
Run Code Online (Sandbox Code Playgroud)