【问题标题】:Potential leak detected in iphone App when Analysed分析时在 iphone App 中检测到潜在泄漏
【发布时间】:2012-12-04 13:04:54
【问题描述】:

我正在构建一个应用程序,该应用程序可以从 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));
}

分析后我得到了潜在的泄漏

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

【问题讨论】:

  • 我对这个 ABRecord 类一无所知,但是由于您使用的是带有“复制”一词的方法,因此我的假设是您需要释放 ABMutableMultiValueRef

标签: iphone ios memory-leaks


【解决方案1】:

你没有释放对象,这就是它导致内存泄漏的原因。试试这个代码。这将修复泄漏并在正确的位置释放对象。希望这对你有帮助

              CFRelease(emails);

【讨论】:

    【解决方案2】:

    您正在从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;
    }
    

    【讨论】:

    • @PriyanHaridas:很高兴
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多