我正在尝试从iOS中的图像资产中读取ARGB像素。为此,我需要一个可以用来获取其CGDataProvider
CGImageRef
。我的问题是,如果我使用以下方法创建CGImageRef
:
CGImageRef cg = [[UIImage imageNamed: Path] CGImage];
我最终需要打电话给CGImageRelease(cg)
吗?如果我不打电话给CGImageRelease
,我会有内存泄漏吗?
遇到的另一个问题是第二次读取同一文件会返回一个空图像,我怀疑这可能是因为我第一次没有调用CGImageRelease
。
只有在使用 CGImageCreate
、 Copy
或 Retain
(或任何此类与创建、复制、保留相关的方法)时,您才必须调用CGImageRelease
。例如:- CGBitmapContextCreateImage
)。在这种情况下,您不必这样做,因为您没有进行任何创建、复制或保留。
不,CGImage将绑定到UIImage的生命周期
遵循 Cocoa 的"创建规则":您只需要释放您拥有的内容(来自名为 new* 的方法的对象,复制*,保留返回所有权)
此外,CF 中的任何对象都遵循 CF 创建规则(仅来自名为 Create*、Copy*、Retain 的方法的对象)