IOS 操作完成后如何释放 vImage 缓冲区

how to free vImage buffers after operation completed in IOS

我尝试在 Accelerate 框架中使用 vImage 缓冲区进行一些直方图计算,并且我将相机图像作为从 CVpixelbuffer 转换而来的 UIimage 提供。算法运行没有错误,但屏幕上处理的相机图像数据非常慢。我在 Apple 文档中阅读了一些有关在任务完成时释放缓冲区的信息。我在抓取缓冲区数据后写了两行代码。然而什么都没有改变。 freed.SourceBuffer 和 histogramSourceBuffer 似乎未被释放后,请参阅缓冲区数据的附加屏幕截图。我不知道如何在调试器中看到空闲缓冲区,但我的缓冲区显示有高度、宽度和数据信息。关于如何释放缓冲区以及如何确保它被释放的任何建议。非常感谢

  if let finalImage =  try? sourceBuffer.createCGImage(format: format) {
            sourceBuffer.free()
            histogramSourceBuffer.free()
            return UIImage(cgImage: finalImage)

您需要在 vImage_Buffer.data 指针上调用 free() 来释放内存。结构本身是一个不同的分配。

直方图本身是指向 vImagePixelCounts 数组的指针数组。应该根据您分配 vImagePixelCounts 数组的方式释放它。 vImage 不涉及该部分,因此它在您和您之间。