gpt4 book ai didi

iphone - 尝试释放 ABRecordRef 时的 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-12-03 16:18:16 24 4
gpt4 key购买 nike

我有以下类,它是 ABPerson (ABRecordRef) 的包装器:

@interface Recipient : NSObject {
ABRecordRef person;
}

- (id)initWithPerson:(ABRecordRef)person;

@end

@implementation

- (id)initWithPerson:(ABRecordRef)_person {
if(self = [super init]) person = CFRetain(_person);
return self;
}

- (void)dealloc {
if(person) CFRelease(person);

[super dealloc];
}

@end

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

一切正常,除了我在 if(person) CFRelease(person); 行上收到 EXC_BAD_ACCESS 。为什么会出现这种情况?我不会在应用程序的其他任何地方调用 CFRelease 或 CFRetain。

编辑,另一个注意事项:如果我将其添加到 CFRelease 行之前:

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

打印retain count is 1

最佳答案

我感觉很羞涩。我有以下代码:

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

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

显然,CFDictionaryGetValue 不会进行复制...这可能就是函数名称中没有 Copy 的原因。我没有保留它,因此 CFRelease(person) 导致 street 在它被回收后被释放。

我猜类中的其余代码是相关的。抱歉,以后发帖时我会尽量不犯这个错误。

关于iphone - 尝试释放 ABRecordRef 时的 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2885607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com