0

这是我的方法:

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];

但是最后一行 show me 是Potential leak of an object stored into 'myimage',而 myImage 的行是Method returns a Core Foundation object with a +1 retain count. 但是我的应用程序启用了 ARC,所以我什么也做不release了。我该如何解决?谢谢。

4

2 回答 2

5
UIImage *retVal = [UIImage imageWithCGImage:myImage];
CGImageRelease(myImage);
return retVal;
于 2013-07-05T10:37:29.600 回答
5

我的应用程序启用了 ARC,所以我无法发布某些内容

错误的。ARC 会阻止您将release消息发送到 Objective-C 对象,因为它会为您管理它们的内存。

但是,在任何其他情况下(即 C 结构),您仍然必须手动管理内存。您可以而且必须在适当的时候在此类结构上使用retain/release函数。

在这种情况下,您必须手动调用CGImageReleasemyImage通过做来平衡保留计数(如 H2CO3 建议的那样)

    UIImage *retVal = [UIImage imageWithCGImage:myImage];
    CGImageRelease(myImage);
    return retVal;
于 2013-07-05T12:02:14.493 回答