发布CGImage(CGImageRef)

时间:2009-08-12 00:14:57

标签: iphone objective-c core-graphics quartz-graphics

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

我在做什么:

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

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

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

这是一种正确的方法吗?

1 个答案:

答案 0 :(得分:17)

Core Foundation objects (which all Core Graphics objects are) do support autorelease.

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

我使用CFRelease而不是CGImageRelease这样的特定类发布函数,但纯粹是风格问题。我只需要提防NULL CGImageRelease检查NULL,而CFRelease会在通过NULL时崩溃。使用CGImageRelease及其兄弟姐妹意味着您不必担心这一点。

我假设您的意思是removeObject:forKey:,而不是removeObject(它不存在,无论如何也无法指定对象)。