장치에서 주소록을 지우는 방법이 있습니다. 방법은 다음과 같습니다.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 메소드에서 반환하거나 복사본에 포함 된 이름을 포함시켜야한다는 것을 알고 있습니까?
흠. [documentation] (http://developer.apple.com/library/ios/documentation/AddressBook/Reference/ABGroupRef_iPhoneOS/Reference/reference.html#//apple_ref/c/func/ABGroupCopyArrayOfAllMembers)에 따르면, 배열, 그래서 이미 autoreleased있어? 사람들을 석방하지 않으면 메모리 누수가 발생합니까? –
프로파일 러는 모든 것이 정상이며 메모리 누수가 없음을 보여줍니다. – taffarel