Xcode静态分析器报告ARC下的一个泄漏 - CFImageRef - 如何解决

时间:2012-01-08 20:32:17

标签: ios xcode memory-leaks automatic-ref-counting cgimageref

在大约2k行代码中,静态分析器只有一个问题,因此:

spellDetailModalViewController  *detailVC = [[spellDetailModalViewController alloc]init];
UIImage *tempImage = self.spellImageView.image;
CGRect newSize = CGRectMake(0.0, 0.0, 320.0, 305.0);
CGImageRef temp = CGImageCreateWithImageInRect([tempImage CGImage], newSize);
UIImage *passingImage = [UIImage imageWithCGImage:temp];
temp=nil;

抱怨CGImageRef'temp''可能'被泄露,并且保留计数为+1。将图像传递给模态ViewController后,我将其设置为nil。显然,在ARC下,我不能在ARC下调用[temp release]。不知道该怎么办。 非常感谢。

2 个答案:

答案 0 :(得分:4)

您需要CGImageRelease temp

CGImageRef temp = CGImageCreateWithImageInRect([tempImage CGImage], newSize);
UIImage *passingImage = [UIImage imageWithCGImage:temp];
CGImageRelease(temp);

来自CGImageCreateWithImageInRect Apple文档:

生成的图像保留对原始图像的引用,这意味着您可以在调用此函数后释放原始图像。

答案 1 :(得分:0)

CGImageCore Graphics对象,ARC无法处理核心库。因此,您应该使用CGImageRelease或更好的方式传递该警告,请使用imageWithCIImage这样的方法;

CIImage *fooImage = [CIImage imageWithCGImage:temp.CGImage];
UIImage *passingImage = [UIImage imageWithCIImage:fooImage];