gpt4 book ai didi

iphone - ARC 中 CFArray 的内存泄漏

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

我使用 ARC 制作了一个 iPhone 应用程序,可以访问地址簿中的每个条目,然后访问每个人的每个地址。数据存储在 CFArray 中,CFArray 可以免费桥接到 NSArray。代码如下。

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef arrayRef = ABAddressBookCopyArrayOfAllPeople(addressBook);
NSArray *peopleArray =[(__bridge NSArray *) arrayRef copy];
CFRelease(arrayRef);
arrayRef = nil;

for(id personId in peopleArray)
{
ABRecordRef person = (__bridge ABRecordRef) personId;
//process other attributes of the address book

ABMultiValueRef multi = ABRecordCopyValue(person, kABPersonAddressProperty);
CFArrayRef addressRef = ABMultiValueCopyArrayOfAllValues(multi);
NSArray *addressArray = [(__bridge NSArray *) addressRef copy];

for(NSDictionary *address in addressArray)
{
//process the addresses
}
CFRelease(addressRef);
addressRef = nil;
}

根据我在互联网上和苹果内存管理指南中的研究,这看起来是正确的方法。问题是当我运行代码时,它停止在“CFRelease(addressRef)”上,并用文本“Thread 1”突出显示为绿色(不确定此错误意味着什么)。我也尝试将 CFRelease 放在 for 循环之前,但出现了同样的问题。

如果我删除 CFRelease,它可以编译,但在创建 addressArray 时会出现内存泄漏。有谁知道如何解决这个问题?我似乎无法使用 ARC 来解决这个问题。

最佳答案

而不是NSArray *peopleArray =[(__bridge NSArray *) arrayRef copy]; CFRelease(arrayRef);,使用 NSArray *peopleArray = CFBridgingRelease(arrayRef)。这会将对象的所有权转移给 ARC。

关于iphone - ARC 中 CFArray 的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9296899/

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