Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS获取exc错误-访问时间->;CFRelease(iPhoneAddressBook);_Ios_Objective C - Fatal编程技术网

iOS获取exc错误-访问时间->;CFRelease(iPhoneAddressBook);

iOS获取exc错误-访问时间->;CFRelease(iPhoneAddressBook);,ios,objective-c,Ios,Objective C,为什么我在CFRelease(iPhoneAddressBook)上获得exc错误访问权限 如何释放iPhoneAddressBook变量 这是我的密码 ABAddressBookRef iPhoneAddressBook; iPhoneAddressBook = ABAddressBookCreateWithOptions(NULL, NULL); dispatch_semaphore_t sema = dispatch_semaphore_create(0); ABAddressBookR

为什么我在
CFRelease(iPhoneAddressBook)
上获得exc错误访问权限

如何释放iPhoneAddressBook变量

这是我的密码

ABAddressBookRef iPhoneAddressBook;

iPhoneAddressBook = ABAddressBookCreateWithOptions(NULL, NULL);
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
ABAddressBookRequestAccessWithCompletion(iPhoneAddressBook,  ^(bool granted, CFErrorRef error){
    dispatch_semaphore_signal(sema);
});

dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);

CFErrorRef error;

[self CheckIfGroupExistWithName:@"group name"];

ABRecordRef group = ABAddressBookGetGroupWithRecordID(iPhoneAddressBook, self->groupId);
ABAddressBookAddRecord(iPhoneAddressBook, group, &error);
ABAddressBookSave(iPhoneAddressBook, &error);
//Create new person and save to this group
ABRecordRef record = ABPersonCreate();
BOOL isSuccess ;
ABRecordSetValue(record, kABPersonFirstNameProperty, (__bridge CFTypeRef)(@"name"), nil);

isSuccess = ABAddressBookAddRecord(iPhoneAddressBook, record, &error);
isSuccess = ABAddressBookSave(iPhoneAddressBook, &error);

ABGroupAddMember(group, record, &error);
ABAddressBookSave(iPhoneAddressBook, &error);
CFRelease(record);
CFRelease(group);
CFRelease(iPhoneAddressBook);
这是NSZombie日志:

0 Malloc +1 1 00:29.823.269 AppSupport _createInstance 1 CFRetain +1 2 00:29.823.360 AppSupport CPRecordLoadHandler 2 CFRelease -1 1 00:29.823.365 AppSupport CPRecordLoadHandler 3 CFRetain +1 2 00:29.823.452 AppSupport CPRecordLoadHandler 4 CFRelease -1 1 00:29.823.507 AppSupport _loadInstanceFromDB 21 CFRetain +1 2 00:30.326.335 AddressBook ABCRecordSetValueAndReturnError 24 CFRetain +1 3 00:30.328.305 AppSupport _createRecordsArrayFromDictionary 25 CFRelease -1 2 00:30.328.460 AddressBook ABCAddressBookSaveWithConflictPolicy 28 CFRelease -1 1 00:30.339.684 AppSupport CPRecordStoreSaveWithPreAndPostCallbacksAndTransactionType 29 CFRelease -1 0 00:30.764.433 DigiPharma -[SpeakerProfileViewController addToContacts:] 30 Zombie -1 00:30.764.698 AppSupport CPRecordStoreDestroy 0 Malloc+1 100:29.823.269 AppSupport\u createInstance 1 CFRetain+1 2 00:29.823.360应用程序支持CPRecordLoadHandler 2 CFRelease-1 100:29.823.365应用程序支持CPRecordLoadHandler 3 CFRetain+1 2 00:29.823.452应用程序支持CPRecordLoadHandler 4 CFRelease-1 100:29.823.507应用支持\u loadInstanceFromDB 21 CFRetain+1 2 00:30.326.335通讯簿ABCRECORDSETVALUE和RETURNERROR 24 CFRetain+1 3 00:30.328.305应用支持\u createRecordsArrayFromDictionary 25 CFRelease-1 2 00:30.328.460通讯簿ABCaddressBooksSaveWithConflictPolicy 28 CFRelease-1 1 00:30.339.684应用程序支持CPRecordStoreSaveWithPre和PostCallBacksandTransactionType 29 CFRelease-1 0 00:30.764.433 Digiphorma-[SpeakerProfileViewController添加到联系人:] 30僵尸-100:30.764.698应用程序支持CPRecordStoreDestroy 关键线路是

CFRelease(group);
ABAddressBookGetGroupWithRecordID
不包含
create
copy
,因此无需释放对象

解决方案:删除该行

从核心基础内存管理文档:

获取规则
如果您从任何核心基础函数接收对象,而不是 创建或复制函数(如Get函数)不是您自己的 无法确定物体的寿命。如果你想确保 如果您在使用该对象时未处理该对象,则 必须声明所有权(使用CFRetain功能)。那你是 负责在完成后放弃所有权 它


能否尝试在启用NSZombie的情况下运行应用程序。如果你不知道怎么做,谷歌怎么做。然后发布结果日志,我会提供帮助。如果你释放了对象,应用程序正在崩溃bcz一些对象仍在使用
iPhoneAddressBook
清除代码,只有在我们工作完成后才释放它muku说,你的应用程序中的某个点试图访问iPhoneAddressBook,但它不存在,如果在这一点上它崩溃了,这意味着iphoneaddressbook是零,也许它从来没有被创建过?这就是我说的让他把NSZombie放在那里,我们可能会得到它在哪里的线索。@Maro,你试过实现所有的逻辑吗(在
调度信号灯\u等待之后
ABAddressBookRequestAccessWithCompletion
completion块的内部?就在
调度信号量信号(sema)之前CFRelease(组)