SceneKit 项目中“IOSurface”内存不断增加

Wes*_*st1 6 memory ios scenekit swift iosurface

这个问题大致与this有关。

我有一个 SceneKit 项目,其中内存管理一直是一个挑战(是的,即使使用 ARC)。

通过以非常具体的方式加载图像,通过weak在闭包中使用变量,以及通过在场景释放之前将SCNMaterials 设置为nil,我已经能够极大地改善内存情况。

这是我加载图像的方式:

DispatchQueue.global(qos: .background).async { [weak material] in
   let path = Bundle.main.path(forResource: "myString", ofType: "png")!
   let img = UIImage(contentsOfFile: path)

   material?.diffuse.contents = img
}
Run Code Online (Sandbox Code Playgroud)

然而,Instruments显示类别的内存VM: IOSurface或多或少地持续增加,但从未被充分回收。根据文档,IOSurface与图像内存有关。

以下是Instruments Allocations显示的内容VM: IOSurface(这里的内存从大约 17MB 到大约 69MB): 在此输入图像描述

对于上图,我多次加载然后卸载 SceneKit 场景。

下面的图表说明了此IOSurface内存与总体内存占用量的关系: 在此输入图像描述

以下是 的调用者IOSurface在此输入图像描述

现在,您可能认为我应该使用UIImage(named:)而不是UIImage(contentsOfFile:),因为系统将前者缓存在内存中,而不是后者。但使用前者会导致我的项目中的内存统计数据更差

我已经看到了这个问题,但它表明问题出在设备摄像头上,而我没有使用它。

问题:您能告诉我IOSurface与 SceneKit 的关系吗?我如何提高其内存使用率?