CFMutableDataRef发布但仍然导致内存泄漏

时间:2013-06-04 22:11:43

标签: ios memory-leaks

我在类方法中有以下代码:

CFMutableDataRef pixelData = CFDataCreateMutableCopy(0, 0,
CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage)));

UInt8 const *data = (UInt8 *)CFDataGetMutableBytePtr(pixelData);
int pixelInfo = ((image.size.width * scale * point.y) + point.x ) * 4;
UInt8 alpha = data[pixelInfo + 3];
CFRelease(pixelData);

当我使用XCode进行分析时,它会在此方法结束时显示“对象的潜在泄漏”。由于我已经发布了pixelData,我不知道泄漏的位置。当我使用检测时,我得到了CGDataProviderCopyData引起的泄漏。正如我在别处读到的那样,问题应该通过调用CFRelease(pixelData)来解决; 有任何想法吗?

2 个答案:

答案 0 :(得分:3)

您正在制作双重副本。你不应该在这里打电话给CFDataCreateMutableCopy()CGDataProviderCopyData()已经为您复制了该副本(正如其名称所述)。

答案 1 :(得分:3)

由于您没有存储对CGDataProviderCopyData返回的数据的引用,因此您以后无法向其发送释放消息。

正如罗布所指出的那样,你的第二份副本是没有必要的。

这应该有效并避免泄漏:

CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
UInt8 const* data = (UInt8*)CFDataGetBytePtr(pixelData);