CFRelease期间的exc_bad_exception

时间:2015-02-23 10:53:30

标签: ios objective-c

我有一个这样的代码行,我在下面提到的一行中遇到了崩溃。

    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
    ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName);
    CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
    for (...) {
        ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
        ...
        CFRelease(persn)
    }
    CFRelease(source);
    CFRelease(allPeople);
    CFRelease(addressBook);

我一直在最后一行CFRelease(addressBook);收到错误 。然而,

如果我在for循环中删除了行CFRelease(person),那么我就停止在最后一行上出现错误的访问错误

你知道为什么会这样吗?

上述代码中CFRelease的可能候选者是什么?为什么???

1 个答案:

答案 0 :(得分:2)

不需要释放人。

ABAddressBook 创建 WithOptions - >需要

ABAddressBook 复制 DefaultSource - >需要

CFArray 获取 ValueAtIndex - > needn'吨

发布 allPeople 后,所有都将被释放。