Предупреждение о нехватке памяти с помощью API: ABPersonSetImageData - PullRequest
0 голосов
/ 23 ноября 2010

Я получаю предупреждение о нехватке памяти после обновления около 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 голосов
/ 23 ноября 2010

Во-первых, я думаю, что ABPersonRemoveImageData () иногда не нужен, поскольку он будет заполняться новыми данными.

Во-вторых, я полагаю, что память занята объектами автоматического освобождения.Вам необходимо освободить эти объекты автоматического высвобождения с помощью NSAutoreleasePool .Если вы выполняете все это в одном и том же цикле выполнения, обычно iOS в какой-то момент выпускает эти объекты автоматического выпуска.

...