我在一個類的方法將以下代碼:CFMutableDataRef釋放,但仍使內存泄漏
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)來解決問題; 任何想法?
我明白了,謝謝你。我之所以使用該副本的原因是因爲我使用tp get的訪問不良,這顯然是iOS 6上的一個常見問題。爲解決此問題,建議使用可變副本。 Thx,無論如何:) – mobearette
確實,您需要創建一個可變副本才能調用'CFDataGetMutableBytePtr()',儘管在此代碼中,您可以在CFData上使用'CFDataGetBytePtr()',而不是創建' CFMutableData'。如果你真的需要一個可變副本,那麼你需要保留一個指向CGDataProviderCopyData()的結果的指針,這樣你可以在做一個可變副本之後釋放它(然後再釋放可變副本)。 –