CGImageRef cg = [[UIImage imageNamed:Path] CGImage];需要CGImageRelease(cg)'?

时间:2012-12-17 20:36:50

标签: objective-c ios core-foundation cgimage

我正在尝试从iOS中的图像资源中读取ARGB像素。为此,我需要一个CGImageRef我可以使用它CGDataProvider。我的问题是,如果我使用:

创建CGImageRef
CGImageRef cg = [[UIImage imageNamed: Path] CGImage];

我最终是否需要致电CGImageRelease(cg)?如果我不打电话给CGImageRelease,我会有内存泄漏吗?

我遇到的另一个问题是第二次读同一个文件会返回一个空图像,我怀疑这可能是因为我没有第一次调用CGImageRelease

2 个答案:

答案 0 :(得分:7)

只有当您使用CGImageReleaseCGImageCreateCopy时,您才需要致电Retain(或者使用创建,复制,保留等任何此类相关方法。例如: - CGBitmapContextCreateImage)。在这种情况下,您不必这样做,因为您没有进行任何创建,复制或保留。

答案 1 :(得分:1)

不,CGImage将与UIImage的生命周期绑定

遵循cocoa的“创建规则”:您只需要释放您拥有的内容(来自名为new *,copy *,retain返回所有权的方法中的对象)

另外,来自CF的任何对象遵循CF创建规则(仅来自名为Create *,Copy *,Retain的方法中的对象)