iphone - 释放 CGImage (CGImageRef)

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

我很好奇我是否正在使用 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/

相关文章:

objective-c - 如何管理未注册用户的用户 session

ios - UICollectionViewLayout.layoutAttributesForElementsInRect 的行为

iphone - 为 UIImageView 的 CABasicAnimation 强制顺时针/逆时针旋转

iphone - 如何从顶部开始画一个圆

iphone - 如何在 iPhone/iPad/iOS 上显示临时弹出消息

ios - UITabBarItem 图像在单击时正在更改图像

ios - 使用 Apple 服务器验证消耗性 IAP 的正确方法是什么?

iphone - XCode 正在尝试加载我从项目中删除的 NIB 文件

ios - 如何改变 storyboard 中 tableHeaderView 的高度?

iOS绘图到屏幕