在用图像更新了大约20个联系人后,我的内存警告不足。我已经放置了代码。谁能说出可能是什么原因?
NSString *imagepath = [[IDLFactory documentsDirectoryPath] stringByAppendingFormat:@"/%@",value];
NSData *dataRef = [[NSData alloc] initWithContentsOfFile:imagepath];
CFDataRef cfdata = CFDataCreate(NULL, [dataRef bytes], [dataRef length]);
[dataRef release];
dataRef = nil;
CFErrorRef error;
ABPersonRemoveImageData(inContact, &error); // <-- clean any image first from ref
BOOL ret = ABPersonSetImageData(inContact, cfdata, &error);
if (ret)
{
ret = ABAddressBookSave(inAddressBook, &error);
} else
{
NSLog(@"Could not write the image to the person");
}
CFRelease(cfdata);
提前致谢
答案 0 :(得分:0)
首先,我认为ABPersonRemoveImageData()有时不是必需的,因为它会填充新数据。
其次,我猜内存被自动释放对象占用。您需要通过 NSAutoreleasePool 释放这些自动释放对象。如果你在同一个运行循环中运行整个事情,通常iOS会在某个时候释放这些自动释放对象。