我无法从内存中释放我的 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)
但仍然没有运气。
我ARSCNView正在跑步ARSession。您可以session.pause()肯定地暂停会话,但这仍然有效,可以使会话继续运行。我尝试ARSCNView通过将其从其超级视图中删除来取消分配。该ARSCNView确实重新分配,但ARSession仍运行后!您不能分配nil给ARSession任何一个。我可以看到ARSessionDelegate的
func session(_ session: ARSession, didUpdate frame: ARFrame)
Run Code Online (Sandbox Code Playgroud)
仍在被叫!
完成后,如何用ARKit彻底擦拭干净?
可能吗?