如何使用+1保留计数(ARC)修复Core Foundation对象?

时间:2013-07-05 10:36:12

标签: ios objective-c automatic-ref-counting

这是我的方法:

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。我该如何解决?谢谢。

2 个答案:

答案 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;