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

发布于 2024-12-25 17:25:43 字数 531 浏览 4 评论 0原文

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

Out of some 2k lines of code, the Static Analyser has only one problem, thus:

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;

It is complaining that CGImageRef 'temp' is 'potentially' being leaked, and has a retain count of +1. I set it to nil after the image has been passed to the modal ViewController. Obviously, under ARC, I can't call [temp release] under ARC. Not sure what to do.
Help greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

紫竹語嫣☆ 2025-01-01 17:25:43

您需要 CGImageRelease temp

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

来自 CGImageCreateWithImageInRect Apple 文档:

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

You need to CGImageRelease temp

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

From the CGImageCreateWithImageInRect Apple docs:

The resulting image retains a reference to the original image, which means you may release the original image after calling this function.

彻夜缠绵 2025-01-01 17:25:43

CGImage 是一个 Core Graphics 对象,ARC 无法处理 Core Libraries。因此,您应该使用 CGImageRelease 或更好的方法来传递该警告,使用类似的 imageWithCIImage 方法;

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

CGImage is a Core Graphics object and ARC can not handle Core Libraries. So you should use CGImageRelease or better way to pass that warning, use imageWithCIImage method like that;

CIImage *fooImage = [CIImage imageWithCGImage:temp.CGImage];
UIImage *passingImage = [UIImage imageWithCIImage:fooImage];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文