- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在解析 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/
我正在使用以下代码在我的应用程序中初始化地址簿:- @property(nonatomic,assign) ABAddressBookRef addressBookRef; self.addressB
苹果说: Important: Instances of ABAddressBookRef can not be used by multiple threads. Each thread must
我有这个枚举地址簿联系人的代码 - +(void)enumerateAddressBookContacts:(void(^)(NSString *name, NSArray *phoneNumbe
我想在 iPhone 应用程序之一中引用我的地址簿。我使用了下面的代码。但它显示[人数] = 0。 我的地址簿应用程序中有 3-4 个联系人,但 [人数] 返回零。 还有什么吗,我在这里失踪了吗? 代
我无法理解如何访问 ABAddressBookRef 中地址的属性。我用电话号码就可以了: ABMultiValueRef phoneNumberProperty = ABRecordCopyValu
我的代码有一个非常奇怪的错误。事实上,根本没有错误,只是调试器以“程序收到信号:“EXC_BAD_ACCESS””消息开始。谁能帮我?我非常困惑...谢谢。 -(NSString *)fullName
我正在解析 iOS 中的地址簿,但 Leaks 工具报告了很大的内存泄漏,我似乎无法找到问题所在 首先,我创建了地址簿。 ABAddressBookRef addressBook = ABAddres
这是我的代码,运行最后一行CFRelease(addressBook),程序崩溃!帮帮我~! ABAddressBookRef addressBook = ABAddressBookCreateWit
我已经在 ObjC 中收集了联系人的地址信息, ABMultiValueRef addressProperty = ABRecordCopyValue(contactRef, kABPersonAdd
在 ARC 下,我有一个 TableView Controller ,它从地址簿中读取每个显示的 TableView 单元格的数据。由于性能原因,我无法在每次调用 tableView:cellForR
GCD 是否确保在同一队列中工作的所有 block 始终在同一线程中工作? 如果我创建一个调度队列并向该队列发送 dispath_async block ,是否所有调度到该队列的 block 都在同一
我有这个代码: CFArrayRef contactsList = ABAddressBookCopyArrayOfAllPeople(addressBookRef); CFMutable
我有几行 Objective-C 代码,例如: ABAddressBookRef addressBook; CFErrorRef error = NULL; addressBook = ABAddre
我是一名优秀的程序员,十分优秀!