ABPersonCopyImageDataWithFormat到CFDataRef导致内存增长/大内存占用

时间:2015-02-18 08:40:47

标签: ios objective-c memory-management automatic-ref-counting

CFData在我复制2000个联系人的联系人图像(所有人都有联系人图像)时不断增长,即使我在处理数据后使用CFRelease。我一次只能访问一个联系人,以避免占用大量内存。代码如下:

- (void) getImageData:(ABRecordRef) contactPerson {
//Retrieving the contact photo
//base64 conversion from NSData to NSMutableString for the thumbnail image
@autoreleasepool {
    if (ABPersonHasImageData(contactPerson)) {
        //NSMutableData *contactImageData = [[NSMutableData alloc] init];
        //NSMutableData *contactImageData = (CFBridgingRelease (ABPersonCopyImageDataWithFormat(contactPerson, kABPersonImageFormatThumbnail)));
        CFDataRef contactImageData =  ABPersonCopyImageDataWithFormat(contactPerson, kABPersonImageFormatThumbnail);

        if (contactImageData) {

            NSMutableString *imgData = [[NSMutableString alloc] init];
            [imgData setString:[(__bridge NSData *)contactImageData base64EncodedStringWithOptions:0 ]];
            currPhoneDBItem.photoBitmap = imgData;

            imgData = nil;
            //contactImageData = nil;
            CFRelease(contactImageData);

        }else{
            NSLog(@"bitmap empty:");
            currPhoneDBItem.photoBitmap = @"";
            //CFRelease(contactImageData);
        }

    } else {
        NSLog(@"bitmap empty:");
        currPhoneDBItem.photoBitmap = @"";
    }
}
}

CurrPhoneDBItem是文件中的全局对象。我仍在试图弄清楚如何解决这个问题。由于我不具备所需的声誉,因此无法发布仪器配置文件的屏幕截图。但CFData最终使用23MB。任何帮助将不胜感激!!!

1 个答案:

答案 0 :(得分:1)

已经有一段时间了。此问题是由于保留了引用而引起的。