我有一个这样的代码行,我在下面提到的一行中遇到了崩溃。
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的可能候选者是什么?为什么???
答案 0 :(得分:2)
不需要释放人。
ABAddressBook 创建 WithOptions - >需要
ABAddressBook 复制 DefaultSource - >需要
CFArray 获取 ValueAtIndex - > needn'吨
发布 allPeople 后,所有人都将被释放。