ARKit和SpriteKit:如何删除SKScene?

时间:2017-10-30 12:03:30

标签: ios memory-management sprite-kit skscene arkit

我的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的任何财产。

1 个答案:

答案 0 :(得分:0)

ARSKView中发生内存泄漏。苹果已经在ios 12中解决了这个问题。