2

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

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

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

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

4

2 回答 2

7

CGImageRelease仅当您使用CGImageCreate,CopyRetain(或任何具有创建、复制、保留的相关方法。例如:- CGBitmapContextCreateImage)时,您才需要调用。在这种情况下,您不必这样做,因为您没有进行任何创建、复制或保留。

于 2012-12-17T20:39:55.560 回答
1

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

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

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

于 2012-12-17T20:38:21.540 回答