Ios 如何用+1保留计数(ARC)来固定核心基础对象?
以下是我的方法:Ios 如何用+1保留计数(ARC)来固定核心基础对象?,ios,objective-c,automatic-ref-counting,Ios,Objective C,Automatic Ref Counting,以下是我的方法: CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(aSampleBuffer); CIImage *ciImage = [CIImage imageWithCVPixelBuffer:imageBuffer]; CIContext *context = [CIContext contextWithOptions:nil]; CGImageRef myImage = [context
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];
但最后一行显示的是存储在“MyI图”中的对象的潜在泄漏,MySimultIn方法的行返回一个具有+1保留计数的核心基础对象。但是我的应用程序启用了ARC,所以我不能发布一些东西。我怎样才能修好它?谢谢
UIImage *retVal = [UIImage imageWithCGImage:myImage];
CGImageRelease(myImage);
return retVal;
我的应用程序已启用ARC,因此无法发布某些内容
错。ARC阻止您向Objective-C对象发送释放消息,因为它为您管理对象的内存
但是,在任何其他情况下,如C结构,您仍然必须手动管理内存。在适当的情况下,您可以并且必须在此类结构上使用保留/释放函数
在这种情况下,您必须手动调用myImage上的CGImageRelease,按照H2CO3的建议平衡保留计数
UIImage *retVal = [UIImage imageWithCGImage:myImage];
CGImageRelease(myImage);
return retVal;
顺便说一句,所以我不能发布一些东西-阅读警告中的内容。您的对象是一个CoreFoundation对象,您不释放它,但是CFRelease,或者在本例中,它有一个指定的释放函数,您可以调用它。ARC不应禁止.UIImage和CGImageRef不是免费桥接的。而且没有CFImage。“我想你的第二个解决方案会崩溃。”马丁纳说。累了一天。你说得很对,我把它删掉part@MartinR完成。谢谢你指出了我答案中惊人的错误;为我辩护,这是意大利一个疯狂的热天!