ABPersonCopyImageData泄漏

时间:2013-06-19 18:09:30

标签: ios memory-leaks addressbook allocation

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

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

2 个答案:

答案 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中执行此操作无效,因为您没有任何自动释放的对象。

查看Core Foundation Create Rule

答案 1 :(得分:0)

完成后,您需要CFRelease(imageData )。它是一个Core Foundation对象 - 自动释放池对你没用。