0

所以 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 中设置断点以进行调试

4

2 回答 2

0

在转换之前创建 CGDataRef 数据的副本,然后转换为 NSData,在处理完您拥有的 CGDataRef 副本之后,然后像这样释放副本。

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

    //.. do some stuff 

    //Releaase data 

    CFRelease(theData);
于 2013-10-27T11:14:24.120 回答
0

我认为你需要保留第rawData一个然后你可以释放pixelData,CFRelease(pixelData) 不要忘记rawData在使用后释放。

于 2012-11-30T04:31:21.930 回答