1

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

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); 来解决问题。有任何想法吗?

4

2 回答 2

3

您正在创建一个双重副本。你不应该CFDataCreateMutableCopy()在这里打电话。CGDataProviderCopyData()已经为您完成了副本(正如它的名字所说)。

于 2013-06-04T22:14:34.713 回答
3

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

正如 Rob 指出的那样,您的第二份副本不是必需的。

这应该有效并避免泄漏:

CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
UInt8 const* data = (UInt8*)CFDataGetBytePtr(pixelData);
于 2013-06-04T22:25:00.500 回答