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

3

在大约2千行代码中,静态分析器只有一个问题,如下:

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下,我无法调用[temp release]。不确定该怎么办。 非常感谢您的帮助。

2个回答

4

您需要释放 tempCGImage

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

来自Apple文档的CGImageCreateWithImageInRect

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


非常感谢 @CocoaFu - 这立刻解决了问题。我在文档中找不到这个,所以才问的。非常感谢你的帮助 - 干杯。 - Skybird
@CocoaFu 不客气 =) 我无法确定我所做的更改是否真正有任何区别(除了能够传递“NULL”而不出错)。 - justin

0

CGImage 是一个 Core Graphics 对象,而 ARC 无法处理核心库。因此,您应该使用 CGImageRelease 或更好的方法来传递该警告,例如使用以下方式的 imageWithCIImage 方法;

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接