为什么我必须释放这些数据? 我是店主吗?

这很奇怪。 在技​​术问答中,苹果公司说:

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

上一篇: Why must I free this data? Am I the owner?

下一篇: sandbox leaderboard empty