我的AR功能不是我的应用中的核心功能,用户可以选择导航到带有ARSKView
的viewController,我在SKScene
中配置并设置ARsession
。
当用户从那个viewController导航回来并且它从推送它的navigationController弹出时,我注意到我的update(_ currentTime: TimeInterval)
子类中的func SKScene
被保持被调用...所以我将此添加到viewController:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
sceneView.session.pause()
sceneView.scene?.isPaused = true
}
但是,对我来说这不是一个解决方案,因为当我从保存ARSKView
的视图控制器导航回来并且它被取消初始化时,我看到SKScene
保留在内存中并且是新的每次我再次导航到AR相关的视图控制器时,都会创建一个。所以,如果我在那里导航N次,我看到内存中有N SKScenes
。
我怎样才能适当地处理这个并在导航时移除场景? ARsession
的场景属性是只读的。
编辑:在视图控制器中,我有:
fileprivate let sceneView = ARSKView()
private func setup() {
if ARWorldTrackingConfiguration.isSupported {
let myScene = MyScene(size: sceneView.bounds.size)
myScene.sceneDelegate = self
myScene.scaleMode = .resizeFill
sceneView.delegate = self
sceneView.presentScene(myScene)
}
}
我没有SKScene
的任何财产。
答案 0 :(得分:0)
ARSKView中发生内存泄漏。苹果已经在ios 12中解决了这个问题。