IOS操作完成后如何释放vImage缓冲区
Posted
技术标签:
【中文标题】IOS操作完成后如何释放vImage缓冲区【英文标题】:how to free vImage buffers after operation completed in IOS 【发布时间】:2020-07-13 14:27:37 【问题描述】:我尝试在 Accelerate 框架中使用 vImage 缓冲区进行一些直方图计算,并将相机图像作为从 CVpixelbuffer 转换而来的 UIimage 提供。算法正常工作,但屏幕上处理的相机图像数据非常慢。我在 Apple 文档中阅读了一些关于在任务完成时释放缓冲区的信息。抓取缓冲区数据后,我写了两行代码。然而什么都没有改变。请参阅缓冲区数据释放后的附加屏幕截图。SourceBuffer 和 histogramSourceBuffer 似乎未释放。我不知道如何在调试器中看到空闲缓冲区,但我的缓冲区显示有高度、宽度和数据信息。任何建议如何释放缓冲区以及如何确保它被释放。真的非常感谢
if let finalImage = try? sourceBuffer.createCGImage(format: format)
sourceBuffer.free()
histogramSourceBuffer.free()
return UIImage(cgImage: finalImage)
【问题讨论】:
【参考方案1】:您需要在 vImage_Buffer.data 指针上调用 free() 以释放内存。结构本身是不同的分配。
直方图本身是一个指向 vImagePixelCounts 数组的指针数组。这应该根据您分配 vImagePixelCounts 数组的方式释放。 vImage 不参与那部分,所以它在你和你之间。
【讨论】:
以上是关于IOS操作完成后如何释放vImage缓冲区的主要内容,如果未能解决你的问题,请参考以下文章