我正在解析iOS中的地址簿,但Leaks仪器报告了大量内存泄漏,我似乎无法追踪问题 首先,我创建了地址簿. ABAddressBookRef addressBook = ABAddressBookCreate();CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeo
首先,我创建了地址簿.
ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
这是我怀疑是泄漏,但ABAddressBookRef和CFArrayRef得到自动释放对吗?
我的其余代码在下面..
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook); NSMutableArray *List = [[NSMutableArray alloc] init]; for (int i = 0; i < nPeople; i++) { ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i); NSNumber *recordId = [NSNumber numberWithInteger:ABRecordGetRecordID(ref)]; CFStringRef firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty); CFStringRef lastName = ABRecordCopyValue(ref, kABPersonLastNameProperty); CFDataRef imgData = ABPersonCopyImageData(ref); ABMutableMultiValueRef multi = ABMultiValueCreateMutable(kABMultiStringPropertyType); multi = ABRecordCopyValue(ref,kABPersonEmailProperty); for (CFIndex i = 0; i < ABMultiValueGetCount(multi); i++) { CFStringRef email, emailLabel; emailLabel = ABMultiValueCopyLabelAtIndex(multi, i); email = ABMultiValueCopyValueAtIndex(multi, i); NSString *emails = [NSString stringWithFormat: @"%@", (NSString *)email]; if (emails) { NSMutableDictionary *addDict = [[NSMutableDictionary alloc] init]; [addDict addObject:emails forKey:@"email"]; [List addObject:addDict]; [addDict release]; } CFRelease(email); CFRelease(emailLabel); } if (firstName) { CFRelease(firstName); } if (lastName) { CFRelease(lastName); } if (imgData) { CFRelease(imgData); } if (ref) { CFRelease(ref); } CFRelease(multi); } //do something with list [List release];好的,这有效,不会泄漏
ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); CFIndex nPeople = ABAddressBookGetPersonCount(addressBook); NSMutableArray *List = [[NSMutableArray alloc] init]; for (int x = 0; x < nPeople; x++) { ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, x); ABMultiValueRef emailMultiValue = ABRecordCopyValue(ref, kABPersonEmailProperty); NSArray *emailAddresses = [(NSArray *)ABMultiValueCopyArrayOfAllValues(emailMultiValue) autorelease]; for (int i = 0; i < [emailAddresses count]; i++) { NSString *emails = [emailAddresses objectAtIndex:i]; if (emails) { NSMutableDictionary *addDict = [[NSMutableDictionary alloc] init]; [addDict addObject:emails forKey:@"email"]; [List addObject:addDict]; [addDict release]; } } if (emailMultiValue) { CFRelease(emailMultiValue); } if (ref) { CFRelease(ref); } } //do something with list [List release]; CFRelease(allPeople);