如何在单击后退按钮后最大程度地减少ARKit Scene中的应用程序内存消耗?
因为每次我在应用程序中打开ARview时,内存使用量都在增加。 当我返回时,它不会释放内存,并且在再次打开ARview之后,内存使用量甚至进一步增加。
class ARViewController: UIViewController, ARSCNViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
setupScene()
setupFocusSquare()
}
func setupScene() {
sceneView.delegate = self
sceneView.session = session
sceneView.antialiasingMode = .multisampling4X
sceneView.automaticallyUpdatesLighting = false
sceneView.preferredFramesPerSecond = 60
sceneView.contentScaleFactor = 1.3
enableEnvironmentMapWithIntensity(25.0)
if let camera = sceneView.pointOfView?.camera {
camera.wantsHDR = true
camera.wantsExposureAdaptation = true
camera.exposureOffset = -1
camera.minimumExposure = -1
camera.maximumExposure = 3
}
}
func setupFocusSquare() {
focusSquare?.isHidden = true
focusSquare?.removeFromParentNode()
focusSquare = FocusSquare()
sceneView.scene.rootNode.addChildNode(focusSquare!)
textManager.scheduleMessage("TRY MOVING LEFT OR RIGHT", inSeconds: 5.0, messageType: .focusSquare)
}
}
答案 0 :(得分:1)
附带的源代码不足以回答如何准确解决内存泄漏。我将介绍如何检测泄漏的步骤。因此,您可以将此类信息添加到问题中,也可以自己解决问题。
Xcode有几种检测内存泄漏的工具:
因此,您将看到应用程序的当前内存图。尝试在左栏检测到一些异常:
也许您将看到很少的视图控制器或场景视图。尝试了解保留此对象的内容,并在需要时使用弱属性。
2.1。选择泄漏工具:
通过点击“记录”按钮(红色圆圈)来运行该应用程序,并进行若干导航以显示问题并返回。在底部,您将看到一些泄漏(如果有)。按大小对它们进行排序,并在负责图书馆中关注。应该有您的应用名称。
如果发现有趣的内容,则可以选择该行并查看负责的堆栈跟踪。
2.2使用分配工具:
通过点击“录制”按钮(红色圆圈)运行该应用程序。导航到有问题的屏幕,然后点击一次。然后点击标记生成按钮:
导航到有问题的屏幕,然后再次返回。然后再次单击“标记生成”。再次重复此步骤,您将在底部看到三代:
因此,您将看到哪些对象在前进和后退之间保持活动状态。您可以扩展例如Generation B并查看保留了哪个对象。通过单击某些行,您将看到负责的代码。
根据前面步骤的结果,您可能会了解问题出在哪里,并添加一些代码来解决某些对象的保留周期或不必要的保留。