为什么我必须释放这些数据? 我是店主吗?
这很奇怪。 在技术问答中,苹果公司说:
void *data = CGBitmapContextGetData (cgctx);
if (data != NULL)
{
// **** You have a pointer to the image data ****
// **** Do stuff with the data here ****
}
// When finished, release the context
CGContextRelease(cgctx);
// Free image data memory for the context
if (data)
{
free(data);
}
我查阅了CGBitmapContextGetData的文档,并没有提到当我调用这个函数时我负责释放数据。 已经有清理上下文的CGContextRelease调用。
必须额外释放上下文中的数据有什么意义? 它只是一个指向这些数据的指针,对吧? 他们为什么在这里打电话free(data)
?
更新 :我忽略阅读整个代码示例。 Apple在CreateARGBBitmapContext()
分配bitmapData
,但不释放它。 这是非常好的,因为上下文仍然需要吸引。
但是, bitmapData
将在绘制完成后被释放,这正是ManipulateImagePixelData()
的结尾。 所以虽然释放get函数获得的东西是不寻常的,但它的示例代码是正确的 。
为了避免混淆释放get函数返回的某些内容,可能需要将位图数据存储在全局/实例变量中,并在完成时将free()
存储在该变量中。
我会假设这是代码示例中的一个错误。 这个函数的文档没有提到任何特殊的东西,所以没有理由说Get Rule在这里不适用。 Quartz 2D文档还特别重申了CoreFoundation内存管理模型适用于Quartz 2D API。
我100%不熟悉与Apple相关的任何代码,但我可以想象cgctx与数据指针无关,因此您必须自行释放它。 IE CGContextRelease()不清理指针。
链接地址: http://www.djcxy.com/p/53105.html