分析时在iphone App中检测到潜在泄漏

时间:2012-12-04 13:04:54

标签: iphone ios memory-leaks

我正在建立一个应用程序来抓取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));
}

分析时我发现潜在泄漏

enter image description here

我该如何解决这个漏洞...... ????

2 个答案:

答案 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;
}