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内存与总体内存占用量的关系:

现在,您可能认为我应该使用UIImage(named:)而不是UIImage(contentsOfFile:),因为系统将前者缓存在内存中,而不是后者。但使用前者会导致我的项目中的内存统计数据更差。
我已经看到了这个问题,但它表明问题出在设备摄像头上,而我没有使用它。
问题:您能告诉我IOSurface与 SceneKit 的关系吗?我如何提高其内存使用率?
| 归档时间: |
|
| 查看次数: |
402 次 |
| 最近记录: |