我正在构建一个应用程序,它使用Scenekit来显示基于数据库返回的信息的场景。我已经创建了一个带有类func的自定义类,该类创建了一个包含需要绘制的所有内容的SCNNode,并将其返回给我的SCNView。在调用此函数之前,我将删除所有现有节点。一切都很顺利,直到我第二次见到它。删除旧的SCNNode之后,在创建新的内存之前,内存不会被释放。是否有一种在不重载内存的情况下删除和替换SCNNode的标准方法?我是iOS开发的新手,以前也从来没有真正做过图形。谢谢
发布于 2017-06-26 09:25:39
我也遇到了同样的问题,我的SceneKit应用程序漏了很多内存。如果将SCNNode的geometry属性设置为nil,则会释放它的内存,然后才允许Swift对其进行去初始化。
下面是如何实现它的一个示例:
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
}
}https://stackoverflow.com/questions/32997711
复制相似问题