【发布时间】:2011-09-17 12:18:14
【问题描述】:
当我使用CGBitmapContextCreate() 手动创建 CGContextRef 时,我是否也必须手动释放位图数据?
现在我正在这样做:我有一个方法可以创建并返回一个 CGContextRef。在该方法中,我还为该上下文创建数据,如下所示:
bitmapData = malloc(bitmapByteCount);
context = CGBitmapContextCreate(bitmapData, ...);
return context;
直到现在我一直相信,当这个方法的调用者在使用它之后简单地释放 CGContextRef 时,一切都很好:CGContextRelease(theContext);
来自CGBitmapContextCreate的文档:
在 iOS 4.0 及更高版本以及 Mac OS X 中 v10.6 及更高版本,您可以传递 NULL if 你想让 Quartz 分配内存 位图。这让你从 管理自己的记忆, 减少内存泄漏问题。
这让我觉得在使用为我创建的便捷方法的上下文后我必须释放两件事:释放上下文的位图数据,然后释放上下文本身。
所以我必须这样做:
void *data = CGBitmapContextGetData(context);
if (data != NULL) {
free(data);
}
如果我不重构我的所有代码以释放位图数据,而不仅仅是上下文,我会在这里有很大的内存泄漏吗?
【问题讨论】:
标签: objective-c ios memory-management core-graphics