2012-01-08 45 views
3

出一些代码2k行的,静态分析仪只有一个问题,即:Xcode的静态分析报告根据ARC一个泄漏 - CFImageRef - 如何解决

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“临时”有可能被泄露,保留数为+1。我将它设置为无图像已经被传递到模态视图控制器之后。显然,在ARC下,我无法在ARC下调用[temp release]。不知道该怎么办。 帮助极大的赞赏。

回答

4

您需要CGImageReleasetemp

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

CGImageCreateWithImageInRect苹果文档:

产生的图像保留原始图像,这意味着你可以调用此函数后释放原始图像的参考。

+0

非常感谢@CocoaFu - 即时解决了它。我无法在文档中找到它,因此我的问题。我非常感谢你的帮助 - 欢呼声。 – Skybird 2012-01-08 20:47:43

+1

@Justin谢谢你的修复! – zaph 2012-01-08 23:13:51

+0

@CocoaFu不客气=)我不能肯定地记得,如果我所做的变化实际上使得任何差别(超出能力通过'NULL'没有一个错误)。 – justin 2012-01-08 23:22:37

0

CGImageCore Graphics对象和ARC不能处理核心库。所以,你应该用CGImageRelease或更好的方式来传递警告,使用imageWithCIImage方式类似;

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