我很好奇我是否正在使用 CGImageRef 进行适当的内存管理,我正在通过几种方法传递它(因为它是 CG 对象,我假设它不支持自动释放)。非 NSObject 的内存管理以及与其他 NSObject 的交互对我来说仍然有些陌生。
这是我在做什么:
我正在使用 CGBitmapContextCreateImage(保留计数 1)在我的图像缓存管理器中创建 CGImageRef,并将其添加到 NSMutableDictionary(保留计数 2)。
当 CALayers 使用图像时,我分配 layer.contents(保留计数 +1),并在删除图层之前使用 layer.contents = nil(保留计数 -1)清除内容。
最后,当清除纹理时,我调用 CGImageRefRelease 和 [NSMutableDictionary removeObject] 将保留计数设为 0。
这样做合适吗?
最佳答案
Core Foundation objects (which all Core Graphics objects are) do support autorelease.
您描述的步骤应该工作正常,不会泄漏或过度释放对象。
我使用 CFRelease
而不是像 CGImageRelease
这样的特定类发布函数,但这纯粹是一种风格问题。我只需要注意 NULL
:CGImageRelease
检查 NULL
,而 CFRelease
在传递 时会崩溃空
。使用 CGImageRelease
及其兄弟意味着您不必为此担心。
我假设您指的是 removeObject:forKey:
,而不是 removeObject
(它不存在,也没有地方可以指定对象)。
关于iphone - 释放 CGImage (CGImageRef),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1263642/