当前位置 : 主页 > 手机开发 > ios >

ABAddressBookRef在iOS中泄露

来源:互联网 收集:自由互联 发布时间:2021-06-11
我正在解析iOS中的地址簿,但Leaks仪器报告了大量内存泄漏,我似乎无法追踪问题 首先,我创建了地址簿. ABAddressBookRef addressBook = ABAddressBookCreate();CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeo
我正在解析iOS中的地址簿,但Leaks仪器报告了大量内存泄漏,我似乎无法追踪问题

首先,我创建了地址簿.

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);
网友评论