崩潰我有設備中清除地址簿的方法。下面的方法是 。當CFRelease(CFArrayRef)
-(void) clearAdressBook
{
ABAddressBookRef addrBook=ABAddressBookCreate();
CFArrayRef groups = ABAddressBookCopyArrayOfAllGroups(addrBook);
if(groups)
{
CFIndex numGroups = CFArrayGetCount(groups);
for(CFIndex idx=0; idx<numGroups; ++idx)
{
ABRecordRef groupItem = CFArrayGetValueAtIndex(groups, idx);
CFArrayRef people=
ABGroupCopyArrayOfAllMembers(groupItem);
if(people)
{
CFIndex peopleCount=CFArrayGetCount(people);
for(CFIndex ind=0;ind<peopleCount;++ind)
{
ABRecordRef person=CFArrayGetValueAtIndex(people, ind);
ABAddressBookRemoveRecord(addrBook, person, nil);
ABAddressBookSave(addrBook, NULL);
CFRelease(person);
}
CFRelease(people);//CRASH
}
}
}
CFRelease(groups);
}
當我釋放CFArrayRef應用程序崩潰時,這裏有什麼問題?因爲我知道我必須釋放所有從CF方法返回的名稱包含複製或創建權的反對意見?
嗯。根據[文檔](http://developer.apple.com/library/ios/documentation/AddressBook/Reference/ABGroupRef_iPhoneOS/Reference/reference.html#//apple_ref/c/func/ABGroupCopyArrayOfAllMembers),它表示它返回數組,所以也許它已經autoreleased?如果你不釋放人,你會得到內存泄漏嗎? – 2013-05-10 12:39:46
分析器顯示一切正常,並且沒有內存泄漏。 – taffarel 2013-05-10 12:46:10