我从AddressBook获取图像有很大问题,下面我粘贴了我的代码。这个imageData从来没有被解除分配,在我的Allocations Instruments上,它看起来总是在内存中永远不会释放。
@autoreleasepool {
CFDataRef imageData = ABPersonCopyImageData(record);
if(imageData)
{
CFRetain(imageData);
CFRelease(imageData);
imageData = NULL;
imageData = nil;
}
}
答案 0 :(得分: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.
}
在autoreleasepool中执行此操作无效,因为您没有任何自动释放的对象。
答案 1 :(得分:0)
完成后,您需要CFRelease(imageData )
。它是一个Core Foundation对象 - 自动释放池对你没用。