我在我的应用程序的几个视图控制器中使用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
在模拟器中运行该应用程序,并在视图之间切换几次,然后显示内存图调试器并检查是否泄漏。
我无法理解正在发生的事情,有人知道吗?
谢谢您的帮助。