这是保存更改后重新加载地址簿的功能
self.addressbook=ABAddressbookCreateWithOptions()
和
self.contactAdd=ABAddressBookCopyArrayOfAllPeople(self.addressBook)
显示为潜在的内存泄漏点。
contactAdd的类型为CFAr r
ayRef,地址簿为ABAddressBookRef
-(void)reloadAddressBook
{
// if(self.addressBook)
// CFRelease(self.addressBook);
self.addressBook = ABAddressBookCreateWithOptions(NULL,NULL);
if(ABAddressBookHasUnsavedChanges(self.addressBook))
{
ABAddressBookSave(self.addressBook,NULL);
}
// if(self.contactAdd)
// CFRelease(self.contactAdd);
self.contactAdd=ABAddressBookCopyArrayOfAllPeople(self.addressBook);
}
答案 0 :(得分:2)
使用另一个变量来像这样分配
contactAddtemp=ABAddressBookCopyArrayOfAllPeople(self.addressBook);
self.contactAdd=(__bridge_retained CFArrayRef) CFBridgingRelease(contactAddtemp);
它在xcode 4.2中对我有用,但是当我检查它在4.6中不起作用可能是因为它使用ABAddressBookCreateWithOptions(NULL,NULL)而不是ABAddressBookCreate()
答案 1 :(得分:0)
In Core Foundation, Create and Copy functions return an ownership reference.
您需要通过在返回的对象(通讯簿,人员数组以及您从此类函数中获得的任何其他内容)上调用CFRelease
来平衡它,或者通过使用{{1 (或通过调用__bridge_transfer
):
CFBridgingRelease
答案 2 :(得分:0)
使用_addressbook而不是self.addressBook。