Objective c 如何在创建CGContextRef时正确清理内存?

Objective c 如何在创建CGContextRef时正确清理内存?,objective-c,ios,memory-management,core-graphics,Objective C,Ios,Memory Management,Core Graphics,当我使用CGBitmapContextCreate()手动创建CGContextRef时,是否也必须手动释放位图数据 现在我正在这样做:我有一个方法创建并返回一个CGContextRef。在该方法中,我还为该上下文创建数据,如下所示: bitmapData = malloc(bitmapByteCount); context = CGBitmapContextCreate(bitmapData, ...); return context; 直到现在,我一直认为,当这个方法的调用方在使用CGCo

当我使用
CGBitmapContextCreate()
手动创建CGContextRef时,是否也必须手动释放位图数据

现在我正在这样做:我有一个方法创建并返回一个CGContextRef。在该方法中,我还为该上下文创建数据,如下所示:

bitmapData = malloc(bitmapByteCount);
context = CGBitmapContextCreate(bitmapData, ...);
return context;
直到现在,我一直认为,当这个方法的调用方在使用CGContextRef之后简单地释放它时,一切都很好:
CGContextRelease(Context)

CGBitmapContextCreate
的文档中:

在iOS 4.0及更高版本和Mac OS X中 v10.6及更高版本,如果 您希望Quartz为其分配内存 位图。这将使你从痛苦中解脱出来 管理自己的内存,这 减少内存泄漏问题

这让我觉得在使用上下文之后,我必须释放两件事,这是为我创建的一个方便的方法:释放上下文的位图数据,然后释放上下文本身

因此,我必须这样做:

void *data = CGBitmapContextGetData(context);
if (data != NULL) {
    free(data);
}

因此,如果我不重构所有代码来释放位图数据,而不仅仅是上下文,那么我的内存是否会大量泄漏?

是的。如果
malloc()
对其进行加密,则最终必须
free()

请参阅我(更正)的答案

如果您使用NULL选项(即,如果您不使用bitmapData,则数据指针在您使用上下文之前是有效的。因此,在释放上下文之前,您需要对数据执行任何您想执行的操作,或者将位图数据复制到某个位置(在这种情况下,您可以事先
malloc()
内存并将其传递给上下文)