API的低内存警告:ABPersonSetImageData

时间:2010-11-23 09:15:53

标签: iphone cocoa-touch addressbook

在用图像更新了大约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);

提前致谢

1 个答案:

答案 0 :(得分:0)

首先,我认为ABPersonRemoveImageData()有时不是必需的,因为它会填充新数据。

其次,我猜内存被自动释放对象占用。您需要通过 NSAutoreleasePool 释放这些自动释放对象。如果你在同一个运行循环中运行整个事情,通常iOS会在某个时候释放这些自动释放对象。