【发布时间】:2022-01-10 15:13:26
【问题描述】:
我正在构建一个应用程序,它使用 Scenekit 根据从数据库返回的信息显示场景。我创建了一个带有类 func 的自定义类,该类创建一个 SCNNode,其中包含需要绘制的所有内容并将其返回给我的 SCNView。在调用此函数之前,我删除了所有现有节点。一切都很好,直到我需要第二次调用它。在移除旧的 SCNNode 之后,在创建新的之前不会释放内存。有没有一种标准方法可以在不超载内存的情况下删除和替换 SCNNode?我是 iOS 开发新手,之前也从未真正做过图形。谢谢
【问题讨论】:
-
你是如何诊断出内存没有被释放的?
-
我的应用程序在收到内存警告后立即崩溃,所以我检查了调试器和仪器 >> 分配。加载场景时内存使用量上升,如果我清除屏幕但只有在之后没有加载新场景时才会减少。那有意义吗?我认为 ARC 持有 SCNNode 因为我正在重绘场景。
-
嘿,保罗,你解决过这个问题吗?我目前有同样的问题。 stackoverflow.com/questions/35687122/…
-
@bpedit 是的,我在某处发现,如果您明确地为几何节点分配 nil 值,那么它会完全解除分配。因此,从场景节点中删除所有子节点后,添加类似这样的一行,self.geometryNode = nil
-
我想我也必须通过枚举所有具有几何形状的孩子来做到这一点?谢谢,伯恩。
标签: ios swift memory scenekit scnnode