ABPersonCopyImageDataWithFormat 到 CFDataRef 导致内存 growth/large 内存占用
ABPersonCopyImageDataWithFormat to CFDataRef causes memory growth/large memory footprint
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 是文件中的全局对象。我仍在尝试找出解决此问题的方法。无法 post Instruments 配置文件的屏幕截图,因为我没有所需的声誉。但是 CFData 最终使用了 23MB。任何帮助将不胜感激!!!
好久不见了。这个问题是由于引用被保留引起的。
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 是文件中的全局对象。我仍在尝试找出解决此问题的方法。无法 post Instruments 配置文件的屏幕截图,因为我没有所需的声誉。但是 CFData 最终使用了 23MB。任何帮助将不胜感激!!!
好久不见了。这个问题是由于引用被保留引起的。