[ios]管理 CGImageRef 内存的规则吗?

标签: ios Objective-C
发布时间: 2017/3/21 22:54:55
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

用于管理内存的规则是什么 CGImageRef s 与ARC? 那就是,有人能帮我的正确的文档吗?

我是从照片库中获取图像,创建 UIImage ,显示︰

CGImageRef newImage = [assetRep fullResolutionImage];
...
UIImage *cloudImage = [UIImage imageWithCGImage:newImage scale:scale orientation:orientation];

我需要做 CGImageRelease(newImage) 吗?

我变内存警告,但它不似乎是我还没有释放的对象逐步增强,我不能看到任何泄漏与文书。 我很困惑。

解决方法 1:

不,你不需要调用 CGImageRelease()CGImageRef 经由 ALAssetRepresentation 的方便方法,如 fullResolutionImagefullScreenImage 。不幸的是,在当前的时间,这些方法的文件和头文件并没有清楚说明。

如果您创建了 CGImageRef 自己使用的一个 CGImageCreate*() 函数,然后你拥有它,负责释放使用该图像 ref CGImageRelease() 。相比之下, CGImageRef s 返回的 fullResolutionImagefullScreenImage 似乎是"autoreleased"在你并不拥有这些方法返回的图像 ref 的感觉。例如,假设您的代码中,你这样试试︰

CGImageRef newImage = [assetRep fullResolutionImage];
...
UIImage *cloudImage = [UIImage imageWithCGImage:newImage
                        scale:scale orientation:orientation];
CGImageRelease(newImage);

如果你运行静态分析器,它会发出的以下警告 CGImageRelease(newImage); 线︰

此时由调用方不拥有的对象的引用计数不正确减量化

请注意,您将得到此警告无论是否设置您的项目使用手动引用计数或ARC。

相比之下的文档 CGImage 的方法 NSBitmapImageRep ,例如,使这一事实, CGImageRef 返回是 autoreleased 更清晰︰

CGImage

从接收机的当前位图数据返回核心图形图像对象。

- (CGImageRef)CGImage

返回值

返回的 autoreleased CGImageRef 不透明类型基于接收机的当前位图数据。

官方微信
官方QQ群
31647020