2010-11-23 40 views
0

更新大約20個圖像聯繫人後,出現內存不足警告。我已經放置了代碼。誰能告訴可能是什麼原因?使用API​​的內存不足警告:ABPersonSetImageData

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

首先,我認爲ABPersonRemoveImageData()有時是沒有必要的,因爲它會用新的數據填充。

其次,我猜測內存被autorelease對象佔用。您需要通過NSAutoreleasePool釋放這些autorelease對象。如果你在同一個運行循環中運行所有的東西,通常iOS會在某個時候釋放那些autorelease對象。

+0

- 如果存在任何圖像,ABPersonRemoveImageData()將被移除,否則它將返回FALSE作爲返回值。它不會填充新的數據。 - 我沒有使用任何autorelease對象在這裏使用autoreleasePool。無論如何,我在我調用此片段的方法中使用autoreleasePool。 – Manjunath 2010-11-24 04:35:02