在创建新的 SCNNode 之前删除 SCNNode 不会释放内存
removing SCNNode does not free memory before creating new SCNNode
我正在构建一个应用程序,它使用 Scenekit 根据从数据库返回的信息显示场景。我创建了一个带有 class 函数的自定义 class,它创建了一个包含所有需要绘制的 SCNNode 并将其 returns 到我的 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
}
}
我正在构建一个应用程序,它使用 Scenekit 根据从数据库返回的信息显示场景。我创建了一个带有 class 函数的自定义 class,它创建了一个包含所有需要绘制的 SCNNode 并将其 returns 到我的 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
}
}