0

我从地址簿获取图像有很大的问题,下面我粘贴我的代码。这个 imageData 从来没有被释放,在我的 Allocations Instruments 上它看起来总是在内存中它永远不会释放。

@autoreleasepool {
            CFDataRef imageData = ABPersonCopyImageData(record);
            if(imageData)
            {
                CFRetain(imageData);
                CFRelease(imageData);
                imageData = NULL;
                imageData = nil;
            }
        }
4

2 回答 2

2

你过度保留imageData

CFDataRef imageData = ABPersonCopyImageData(record); // Returns a +1 owned object
if(imageData)
{
    CFRetain(imageData);     // This is now +2
    CFRelease(imageData);    // This is now +1
    imageData = NULL;        // You've lost the pointer that lets you release it
    imageData = nil;         // Does nothing.
}

将它放在自动释放池中没有任何作用,因为您没有任何自动释放的对象。

看看核心基础创建规则

于 2013-06-19T19:15:30.133 回答
0

CFRelease(imageData )当你完成它时,你需要这样做。它是一个核心基础对象——自动释放池对你没有好处。

于 2013-06-19T18:23:45.267 回答