Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Iphone EXC_尝试释放ABRecordRef时访问错误_Iphone_Cocoa_Core Foundation - Fatal编程技术网

Iphone EXC_尝试释放ABRecordRef时访问错误

Iphone EXC_尝试释放ABRecordRef时访问错误,iphone,cocoa,core-foundation,Iphone,Cocoa,Core Foundation,我有一个类,它是ABPerson(ABRecordRef)的包装器: 我遗漏了一些方法,但它们与这个问题无关 一切正常,除了我在if(person)CFRelease(person)上获得了EXC\u BAD\u访问权限行。为什么会发生这种情况?在我的应用程序的任何其他地方,我都不会调用CFRelease或CFRetain 编辑,另一个注释:如果我在CFRelease行之前添加此项: NSLog(@"retain count is %d", CFGetRetainCount(person));

我有一个类,它是ABPerson(ABRecordRef)的包装器:

我遗漏了一些方法,但它们与这个问题无关

一切正常,除了我在
if(person)CFRelease(person)上获得了
EXC\u BAD\u访问权限
行。为什么会发生这种情况?在我的应用程序的任何其他地方,我都不会调用CFRelease或CFRetain

编辑,另一个注释:如果我在CFRelease行之前添加此项:

NSLog(@"retain count is %d", CFGetRetainCount(person));

它打印的
保留计数为1

我觉得不好意思。我有以下代码:

// getting the address
CFDictionaryRef dict = ABMultiValueCopyValueAtIndex(multi, addressIndex);

NSString *_street = (NSString *)CFDictionaryGetValue(dict,
    kABPersonAddressStreetKey);
if(_street != nil) street = _street;    
显然,CFDictionaryGetValue不会复制。。。这可能就是为什么函数名中没有
Copy
。我并没有保留它,所以CFRelease(person)导致街道在已经被回收后被释放


我想课程中的其他代码是相关的。对不起,我以后在这里发帖时会尽量避免犯这个错误。

有没有可能ABRecordRef
person
对象在调用CFRelease之前有一些内部对象被取消引用了?有可能,但我已经看过了,我想不出它会在哪里。我可以看到,这个代码没有任何错误,所以要么你用其他方法做了什么,要么贾斯汀有答案
// getting the address
CFDictionaryRef dict = ABMultiValueCopyValueAtIndex(multi, addressIndex);

NSString *_street = (NSString *)CFDictionaryGetValue(dict,
    kABPersonAddressStreetKey);
if(_street != nil) street = _street;