Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何用+1保留计数(ARC)来固定核心基础对象?_Ios_Objective C_Automatic Ref Counting - Fatal编程技术网

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完成。谢谢你指出了我答案中惊人的错误;为我辩护,这是意大利一个疯狂的热天!