同样一段代码Swift没有内存问题, 而OC有内存释放的问题. 折腾了一下午才发现OC需要调用CGImageRelease去释放CGImage对象, 真是坑!
Objective-C
- (UIImage *) imageFromSampleBuffer: (CMSampleBufferRef) sampleBuffer {
CVImageBufferRef buffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CIImage *ciImage = [[CIImage alloc] initWithCVPixelBuffer:buffer];
CGImageRef cgImage = [[[CIContext alloc] init] createCGImage:ciImage fromRect:ciImage.extent];
UIImage *image = [[UIImage alloc] initWithCGImage:cgImage];
CGImageRelease(cgImage); //没有此句话无法释放内存
return image;
}
Swift
private func imageFromSampleBuffer(sampleBuffer: CMSampleBuffer) -> UIImage? {
guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return nil }
let ciImage = CIImage(cvPixelBuffer: imageBuffer)
guard let cgImage = CIContext().createCGImage(ciImage, from: ciImage.extent) else { return nil }
return UIImage(cgImage: cgImage)
}