我正在解析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);
        
             