SCNView的容器视图控制器被关闭时,会导致内存泄漏

时间:2019-01-18 09:22:19

标签: ios memory-leaks scenekit

我在我的应用程序的几个视图控制器中使用SCNView来显示一些3D内容。问题是,当我关闭包含SCNView的视图控制器时,根据XCodes内存图工具,内存泄漏。 SCNView本身不包含在任何保留周期中,仅包含Foundation,CoreFoundation等的框架对象以及一些SCNKit对象,例如C3DImage和C3DTexture。

可以在一个简单的应用程序中重新创建该问题,如下所示:

  • 在XCode中创建一个新项目,然后选择Game模板

  • 创建一个新的视图控制器并将其设置为启动屏幕

  • 将UIButton添加到新的视图控制器,并将其与Segue连接以显示包含SCNView的原始视图控制器。

  • 将以下代码添加到方法handleTap(_ poseRecognize:UIGestureRecognizer)的GameViewController.swift中。

    func handleTap(_ gestureRecognize: UIGestureRecognizer) {
    
    // ---- Line added
    self.dismiss(animated: true, completion: nil)
    // ----
    
    // retrieve the SCNView
    let scnView = self.view as! SCNView
    
    // check what nodes are tapped
    
  • 在模拟器中运行该应用程序,并在视图之间切换几次,然后显示内存图调试器并检查是否泄漏。

我无法理解正在发生的事情,有人知道吗?

谢谢您的帮助。

0 个答案:

没有答案