【问题标题】:Xcode Static Analyser reports one leak under ARC - CFImageRef - how to resolveXcode 静态分析报告 ARC 下的一处泄漏 - CGImageRef - 如何解决
【发布时间】:2012-02-05 13:13:25
【问题描述】:

在大约 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]。不知道该怎么办。 非常感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    你需要CGImageReleasetemp

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

    来自CGImageCreateWithImageInRect Apple 文档:

    生成的图片保留了对原图的引用,也就是说你可以在调用这个函数后释放原图。

    【讨论】:

    • 非常感谢@CocoaFu - 这已经立即解决了。我在文档中找不到,因此我提出了问题。非常感谢您的帮助 - 干杯。
    • @CocoaFu 不客气 =) 我无法确定我所做的更改是否真的产生了任何影响(除了能够通过 NULL 而不出现错误)。
    【解决方案2】:

    CGImageCore Graphics 对象,ARC 无法处理核心库。所以你应该使用CGImageRelease或者更好的方法来传递这个警告,使用imageWithCIImage这样的方法;

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      相关资源
      最近更新 更多