相关疑难解决方法(0)

为什么 RealityKit 内存在 deinit 调用后没有清除?

我无法从内存中释放我的 RealityKit ARView()。不幸的是,我知道 ARKit + SceneKit 也存在类似的问题,但解决方法并不能解决我的问题。

上述解决方案通过手动删除所有“可疑”内容来发挥作用。这正是我在更广泛的范围内所做的:

func closeCurrentView(completion: (() -> Void)? = nil, isScanAnotherFloor: Bool = false) {
    if backgroundRenderingID != UIBackgroundTaskIdentifier.invalid {
        let app = UIApplication.shared
        app.endBackgroundTask(self.backgroundRenderingID)
        self.backgroundRenderingID = UIBackgroundTaskIdentifier.invalid
    }
    self.arView?.session.pause()
    self.arView?.session.delegate = nil
    self.arView?.scene.anchors.removeAll()
    self.arView?.removeFromSuperview()
    self.arView?.window?.resignKey()
    self.arView = nil
}
Run Code Online (Sandbox Code Playgroud)

内存会上升到90MB到250MB,一旦deinit调用就会减少到175MB,不会清除所有内存。

另外在初始化时,我也设置了适当的选项。

arView?.renderOptions = [
    .disableMotionBlur,
    .disableDepthOfField,
    .disablePersonOcclusion,
    .disableGroundingShadows,
    .disableFaceOcclusions,
    .disableHDR
]
Run Code Online (Sandbox Code Playgroud)

但仍然没有运气。

在此输入图像描述

swift arkit realitykit

8
推荐指数
1
解决办法
892
查看次数

Swift ARKit如何完全杀死ARSession?

ARSCNView正在跑步ARSession。您可以session.pause()肯定地暂停会话,但这仍然有效,可以使会话继续运行。我尝试ARSCNView通过将其从其超级视图中删除来取消分配。该ARSCNView确实重新分配,但ARSession仍运行后!您不能分配nilARSession任何一个。我可以看到ARSessionDelegate

func session(_ session: ARSession, didUpdate frame: ARFrame) 
Run Code Online (Sandbox Code Playgroud)

仍在被叫!

完成后,如何用ARKit彻底擦拭干净?

可能吗?

swift arkit arscnview

4
推荐指数
1
解决办法
1079
查看次数

标签 统计

arkit ×2

swift ×2

arscnview ×1

realitykit ×1