我无法从内存中释放我的 RealityKit ARView()。
我知道 ARKit + SceneKit \xe2\x80\x93 存在类似问题,并具有如下解决方法:/sf/answers/3774381131/ \n这确实解决了我的问题不幸的是问题。
\n\n上述解决方案通过手动删除所有“可疑”内容来发挥作用。这正是我在更广泛的范围内所做的:
\n\nclass ViewController_ARViewMemoryTest: UIViewController {\n\n var arView: ARView?\n\n init() {\n super.init(nibName: nil, bundle: nil)\n arView = ARView(frame: .zero)\n }\n\n required init?(coder: NSCoder) {\n fatalError("init(coder:) has not been implemented")\n }\n\n deinit {\n doEverythingThatsNeeded()\n }\n\n public func doEverythingThatsNeeded() {\n self.arView?.session.pause()\n self.arView?.session.delegate = nil\n self.arView?.removeFromSuperview()\n // Quite a few more removals and resets here, ie. for Combines AnyCancellables\n self.arView = nil\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我也从外部调用 doEverythingThatsNeeded() :
\n\naRViewMemoryTest?.doEverythingThatsNeeded()\naRViewMemoryTest?.arView …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彻底擦拭干净?
可能吗?