当我使用 CGBitmapContextCreate()
手动创建 CGContextRef 时,是否还必须手动释放位图数据?
现在我正在这样做:我有一个创建并返回 CGContextRef 的方法。在该方法中,我还为该上下文创建了数据,如下所示:
bitmapData = malloc(bitmapByteCount);
context = CGBitmapContextCreate(bitmapData, ...);
return context;
直到现在,我一直认为只要调用此方法的调用者在使用后释放 CGContextRef 就一切正常:CGContextRelease(theContext);
来自CGBitmapContextCreate
的文档:
In iOS 4.0 and later, and Mac OS X v10.6 and later, you can pass NULL if you want Quartz to allocate memory for the bitmap. This frees you from managing your own memory, which reduces memory leak issues.
这让我觉得在使用为我创建的便捷方法的上下文之后我必须释放两件事:释放上下文的位图数据,然后释放上下文本身。
所以我必须这样做:
void *data = CGBitmapContextGetData(context);
if (data != NULL) {
free(data);
}
那么,如果我不重构我的所有代码以释放位图数据,而不仅仅是上下文,那么我这里是否有很大的内存泄漏?
最佳答案
是的。如果您 malloc()
编辑它,您最终必须 free()
bitmapData(一旦 CGContext 完成绘制等)。
请参阅我对 your other question 的(更正)回答.
如果您使用 NULL 选项(即,如果您不 malloc()
您的位图数据),我希望数据指针在您之前有效CGContextRelease()
你的上下文。所以你要么需要在释放上下文之前对数据做任何你想做的事情,要么将位图数据复制到某个地方(在这种情况下你也可以预先 malloc()
内存和将其传递给上下文)。
关于objective-c - 创建 CGContextRef 时如何正确清理内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6391664/