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

时间:2015-10-07 16:33:18

标签: ios swift memory scenekit scnnode

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

1 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,我的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
    }
}