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

标签 ios swift memory scenekit scnnode

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

最佳答案

我遇到了同样的问题,我的 SceneKit 应用程序泄漏了大量内存。如果在让 Swift 取消初始化它之前将其 geometry 属性设置为 nil,则 SCNNode 的内存将被释放。

以下是您如何实现它的示例:

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/

相关文章:

ios - 初始化大量实例

ios - 像默认电子邮件应用程序一样的核心数据详细 View

c - C内存读写BMP文件错误

Java程序占用内存过多

swift - AV 视频 URL 在内存中保留多长时间?

ios - 如何在边缘附近滚动的情况下将 View 拖动到 UIScrollView 内?

ios - 如何将格林威治标准时间转换为本地时间以显示确切时间

ios - 解决 swift 和 xcode 6.4 beta 中的 Apple Mach-O 链接器错误

ios - 解析查询崩溃 (Swift)

ios - 集成 FirebasePhoneAuthUI 进行电话号码身份验证