我很好奇我是否对CGImageRef进行了适当的内存管理,我通过几个方法传递了它(因为它是CG对象,我假设它不支持自动释放)。对我来说,使用非NSObjects对象进行内存管理以及与其他NSObject进行交互仍然有些陌生。
下面是我正在做的事情:
我正在使用CGBitmapContextCreateImage (保留计数1)在我的图像缓存管理器中创建CGImageRef,并将其添加到NSMutableDictionary (保留计数2)。
当CALayers使用图像时,我使用layer.contents (保留计数+1)赋值,并在删除图层之前使用layer.contents = nil (保留计数-1)清除内容。
最后,当清除纹理时,我调用CGImageRefRelease和NSMutableDictionary removeObject使保留计数为0。
这是一种正确的方式吗?
发布于 2009-08-12 00:34:32
Core Foundation objects (which all Core Graphics objects are) do support autorelease.
您描述的步骤应该工作得很好,并且不会泄漏或过度释放对象。
我使用CFRelease而不是像CGImageRelease这样的特定类发布函数,但纯粹是出于风格的考虑。我只需要小心NULL:CGImageRelease检查NULL,而CFRelease在传递NULL时会崩溃。使用CGImageRelease和它的兄弟组件意味着您不必担心这一点。
我假设您指的是removeObject:forKey:,而不是removeObject (它并不存在,也不会有地方指定对象)。
https://stackoverflow.com/questions/1263642
复制相似问题