我对我的iOS应用程序做了一个看似无害的变化,应用程序崩溃了,因为随着应用程序的运行,内存消耗不断增加,直到崩溃。这可能是内存消耗增加了10倍。
如何找出哪个类或结构对此负责?我正在寻找类似的东西:
CVPixelBuffer:800MB CMSampleBuffer:100MB CIImage:50MB
我查看了Xcode的内存调试器和Instruments,但没有找到任何内容。
答案 0 :(得分:0)
这是CIFilter initialiser中的内存泄漏。以下是重现的步骤:
以下是代码:
let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
let metadata = CMCopyDictionaryOfAttachments(nil, sampleBuffer, kCMAttachmentMode_ShouldPropagate)!
_ = CIFilter(cvPixelBuffer: pixelBuffer, properties: metadata)
预期结果:
创建Swift对象并将其丢弃不会泄漏内存。
实际结果:
捕获BGRA(而不是RAW)样本缓冲区并将其转换为CIImage不会泄漏内存:
_ = CIImage(cvImageBuffer:pixelBuffer,options:[kCIImageProperties:metadata])
这是在iPhone 7 Plus和iPhone X上的iOS 11上。