CGDataProviderCopyData泄漏

时间:2012-11-30 04:07:40

标签: ios memory-management

因此xcode工具告诉我,我在下面的代码中有泄漏

imageRef = [[_originalGridView image] CGImage];
_width = CGImageGetWidth(imageRef);
_height = CGImageGetHeight(imageRef);

//leak?
pixelData = (NSData*)CGDataProviderCopyData(CGImageGetDataProvider(imageRef));

rawData = (unsigned char*) [pixelData bytes];

问题是如果我尝试释放pixelData会崩溃,我在这里有点不知所措。有没有另一种方法可以做我目前正在做的事情,或者我应该释放我不是的东西。

编辑:对于那些说我应该发布像素数据的人来说,当我尝试

时会发生这种情况

malloc: *对象0x547b000的错误:未分配被释放的指针 * 在malloc_error_break中设置断点以进行调试

2 个答案:

答案 0 :(得分:0)

我认为您需要首先保留rawData,然后才能使用CFRelease(pixelData)释放pixelData 不要忘记在使用后发布rawData

答案 1 :(得分:0)

在投射之前创建CGDataRef数据的副本,然后转换为NSData, 在完成您拥有它的CGDataRef副本之后,然后发布像这样的副本。

     CFDataRef theData; 
    theData = CGDataProviderCopyData(CGImageGetDataProvider(imageRef));
// caste 
    NSData *data = (__bridge NSData *)theData; 

    //.. do some stuff 

    //Releaase data 

    CFRelease(theData);