gpt4 book ai didi

ios - ABAddressBookRef 在 iOS 中泄漏

转载 作者:可可西里 更新时间:2023-11-01 17:10:56 24 4
gpt4 key购买 nike

我正在解析 iOS 中的地址簿,但 Leaks 工具报告了很大的内存泄漏,我似乎无法找到问题所在

首先,我创建了地址簿。

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);

这就是我怀疑的泄漏,但是 ABAddressBookRef 和 CFArrayRef 得到了自动释放,对吗?

我的其余代码在下面..

CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
NSMutableArray *List = [[NSMutableArray alloc] init];



for (int i = 0; i < nPeople; i++) {

ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i);
NSNumber *recordId = [NSNumber numberWithInteger:ABRecordGetRecordID(ref)];

CFStringRef firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
CFStringRef lastName = ABRecordCopyValue(ref, kABPersonLastNameProperty);

CFDataRef imgData = ABPersonCopyImageData(ref);

ABMutableMultiValueRef multi = ABMultiValueCreateMutable(kABMultiStringPropertyType);

multi = ABRecordCopyValue(ref,kABPersonEmailProperty);


for (CFIndex i = 0; i < ABMultiValueGetCount(multi); i++) {

CFStringRef email, emailLabel;
emailLabel = ABMultiValueCopyLabelAtIndex(multi, i);
email = ABMultiValueCopyValueAtIndex(multi, i);
NSString *emails = [NSString stringWithFormat: @"%@", (NSString *)email];

if (emails)
{
NSMutableDictionary *addDict = [[NSMutableDictionary alloc] init];
[addDict addObject:emails forKey:@"email"];
[List addObject:addDict];
[addDict release];
}


CFRelease(email);
CFRelease(emailLabel);

}

if (firstName) {
CFRelease(firstName);
}

if (lastName) {
CFRelease(lastName);
}

if (imgData) {
CFRelease(imgData);
}

if (ref) {
CFRelease(ref);
}

CFRelease(multi);
}


//do something with list
[List release];

最佳答案

好的,这有效,不会泄漏

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
NSMutableArray *List = [[NSMutableArray alloc] init];

for (int x = 0; x < nPeople; x++) {

ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, x);
ABMultiValueRef emailMultiValue = ABRecordCopyValue(ref, kABPersonEmailProperty);

NSArray *emailAddresses = [(NSArray *)ABMultiValueCopyArrayOfAllValues(emailMultiValue) autorelease];

for (int i = 0; i < [emailAddresses count]; i++) {

NSString *emails = [emailAddresses objectAtIndex:i];

if (emails)
{
NSMutableDictionary *addDict = [[NSMutableDictionary alloc] init];
[addDict addObject:emails forKey:@"email"];
[List addObject:addDict];
[addDict release];
}

}

if (emailMultiValue)
{
CFRelease(emailMultiValue);
}

if (ref) {
CFRelease(ref);
}

}

//do something with list
[List release];
CFRelease(allPeople);

关于ios - ABAddressBookRef 在 iOS 中泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8065117/

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