【问题标题】:removeFromParentNode not freeing memory in ARKit ApplicationremoveFromParentNode 未释放 ARKit 应用程序中的内存
【发布时间】:2018-03-16 08:18:50
【问题描述】:

您好,我在使用 SceneKit 和 ARKit 时非常陌生,所以这可能是一个基本问题。在我的 ARKit 应用程序中,我试图从一个点到一个方向连续发射一些火箭。因此我写了这个函数:

@objc func shootRocket() {
    guard let cameraTransform = session.currentFrame?.camera.transform else {
        return
    }

    let rocket = VirtualObject(definition: VirtualObjectManager.availableObjects[VirtualObjectManager.availableObjects.count - 1])

    let rocket_pos = float3(x: position.x, y: position.y+0.144, z: position.z-0.66)
    virtualObjectManager.loadVirtualObject(rocket, to: rocket_pos, cameraTransform: cameraTransform)

    if rocket.parent == nil {
        serialQueue.async {
            self.sceneView.scene.rootNode.addChildNode(rocket)
            let moveaction = SCNAction.move(by: SCNVector3(0,0,-10), duration: 5)
            rocket.runAction(moveaction) {
                rocket.removeAllActions()
                rocket.removeAllAnimations()
                rocket.removeFromParentNode()
            }
        }
    }

}

我这样调用这个函数:

    if object.parent == nil {
        serialQueue.async {
            self.sceneView.scene.rootNode.addChildNode(object)
        }
        let timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(self.shootRocket), userInfo: nil, repeats: true)
        ...
    }

一切正常,只是我的内存使用量在每次拍摄后越来越大,并且在几次拍摄后应用程序崩溃。

虽然函数 removeFromParentNode() 在被调用时释放了一些内存,但它看起来不像。

那么这里的问题是什么?

【问题讨论】:

    标签: swift memory scenekit arkit


    【解决方案1】:

    我遇到了和你一样的问题。基本上你应该做的是覆盖你的虚拟对象类中的dealloc/deinit函数,并在这个函数中,枚举你的虚拟对象的所有子节点并将它们从它们的父节点中删除。

    应该是这样的:

    deinit {
        enumerateChildNodes({(_ child: SCNNode, _ stop: Bool) -> Void in
            child.removeFromParentNode()
        })
        print("Object Deallocated =)")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多