这是我的方法:
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(aSampleBuffer);
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:imageBuffer];
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef myImage = [context
createCGImage:ciImage
fromRect:CGRectMake(0, 0,
CVPixelBufferGetWidth(imageBuffer),
CVPixelBufferGetHeight(imageBuffer))];
return [UIImage imageWithCGImage:myImage];
但最后一行显示的是Potential leak of an object stored into 'myimage'
,myImage的行是Method returns a Core Foundation object with a +1 retain count
。但是我的应用程序启用了ARC,所以我不能release
。我该如何解决?谢谢。
答案 0 :(得分:5)
UIImage *retVal = [UIImage imageWithCGImage:myImage];
CGImageRelease(myImage);
return retVal;
答案 1 :(得分:4)
我的应用程序启用了ARC,因此我无法发布内容
错误。 ARC阻止您向Objective-C对象发送release
消息,因为它为您管理内存。
但是,您仍然需要在任何其他情况下(即C结构)手动管理内存。您可以 - 并且必须 - 在适当的时候在这些结构上使用retain
/ release
函数。
在这种情况下,您必须在CGImageRelease
上手动调用myImage
,通过执行(按照H2CO3的建议)平衡保留计数
UIImage *retVal = [UIImage imageWithCGImage:myImage];
CGImageRelease(myImage);
return retVal;