我正在建立一个应用程序来抓取iPhone手册中的所有联系人,并过滤我的名字,只有电子邮件。我使用以下功能(使用具有电子邮件地址的名称进行过滤)
- (long)personRecord:(ABRecordRef)paramPerson{
if(paramPerson == nil){
NSLog(@"The given Person is Null");
}
ABMutableMultiValueRef emails = ABRecordCopyValue(paramPerson, kABPersonEmailProperty);
if(emails == nil){
return 0;
}
NSLog(@"%ld",ABMultiValueGetCount(emails));
// return (ABMultiValueGetCount(emails));
return (ABMultiValueGetCount(emails));
}
分析时我发现潜在泄漏
我该如何解决这个漏洞...... ????
答案 0 :(得分:2)
您没有释放该对象,这就是为什么它会导致内存泄漏。请尝试此代码。这将修复泄漏并在正确的位置释放对象。希望这可以帮助您
CFRelease(emails);
答案 1 :(得分:1)
您正在从ABRecordRef
获取该对象的副本。所以你需要发布它。
更改您的方法;
- (long)personRecord:(ABRecordRef)paramPerson
{
if(paramPerson == nil)
{
NSLog(@"The given Person is Null");
}
ABMutableMultiValueRef emails = ABRecordCopyValue(paramPerson, kABPersonEmailProperty);
if(emails == nil)
{
return 0;
}
NSLog(@"%ld",ABMultiValueGetCount(emails));
// return (ABMultiValueGetCount(emails));
long count = ABMultiValueGetCount(emails);
CFRelease(emails);
return count;
}