Reputation: 5093
I have a code line this and I get a crash consistently on line mentioned below.
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);
I consistently get the error on the last line CFRelease(addressBook);
. However,
if I remove line CFRelease(person)
inside the for loop, then I stopped getting bad access error on last line
Would you know why is that the case?
What are the possible candidates for CFRelease in above code and why???
Upvotes: 1
Views: 111
Reputation: 1144
Needn't to release person.
ABAddressBookCreateWithOptions -> need
ABAddressBookCopyDefaultSource -> need
CFArrayGetValueAtIndex -> needn't
Once you release allPeople, all person will be release.
Upvotes: 2