3

我很好奇我是否正在使用 CGImageRef 进行正确的内存管理,我正在通过几种方法(因为它是 CG 对象,我假设它不支持自动释放)。非 NSObjects 的内存管理以及与其他 NSObjects 的交互对我来说仍然有些新鲜。

这是我在做什么:

我正在使用 CGBitmapContextCreateImage(保留计数 1)在我的图像缓存管理器中创建 CGImageRef,并将其添加到 NSMutableDictionary(保留计数 2)。

当 CALayers 使用图像时,我使用 layer.contents(保留计数 +1)进行分配,并在删除图层之前使用 layer.contents = nil(保留计数 -1)清除内容。

最后,在清除纹理时,我调用 CGImageRefRelease 和 [NSMutableDictionary removeObject] 将保留计数设为 0。

这是这样做的正确方法吗?

4

1 回答 1

17

Core Foundation 对象(所有 Core Graphics 对象都是)支持自动释放。

您描述的步骤应该可以正常工作,并且不会泄漏或过度释放对象。

我使用CFRelease而不是特定类的发布函数,例如CGImageRelease,但纯粹是出于风格问题。我只需要提防NULLCGImageRelease检查NULL,而CFRelease通过时会崩溃NULL。使用CGImageRelease和它的兄弟意味着你不必担心这个。

我假设您的意思是removeObject:forKey:, not removeObject(它不存在并且无论如何都没有指定对象的地方)。

于 2009-08-12T00:34:31.733 回答