【问题标题】:Potential Memory leak abaddressbookcopyarrayofallpeople( )潜在的内存泄漏 abaddressbookcopyarrayofallpeople( )
【发布时间】:2013-08-02 06:37:08
【问题描述】:

这是保存更改后重新加载我的通讯录的功能,行

self.addressbook=ABAddressbookCreateWithOptions()

self.contactAdd=ABAddressBookCopyArrayOfAllPeople(self.addressBook)

显示为潜在的内存泄漏点。

contactAdd 是 CFArrayRef 类型,地址簿是 ABAddressBookRef

  -(void)reloadAddressBook
    {
    //   if(self.addressBook)
    //       CFRelease(self.addressBook);
       self.addressBook = ABAddressBookCreateWithOptions(NULL,NULL);
        if(ABAddressBookHasUnsavedChanges(self.addressBook))
        {

            ABAddressBookSave(self.addressBook,NULL);
        }
    //    if(self.contactAdd)
    //        CFRelease(self.contactAdd);

        self.contactAdd=ABAddressBookCopyArrayOfAllPeople(self.addressBook);
    }

【问题讨论】:

  • 把你的相关代码放在这里:)
  • 你以后要释放这个对象temp吗?
  • 在分配时使用_bridge_transfer,因为您分配给CFArray,它是核心基础数组,没有释放或释放数组的方法。要将其降落在保留上,请使用 _bridge 释放目标 C 的土地。
  • @AshutoshMishra 我给的每个 CFRelease 都显示出潜在的内存泄漏..
  • @AshutoshMishra:“它是核心基础框架类,所以存在一些漏洞”是过于简单化了。如果您从 CF 或基于 CF 的东西中获取对象,则需要清理它。 CF 不一定意味着泄漏,仅仅因为涉及到 CF 而接受泄漏是草率的编程。

标签: ios xcode addressbookui


【解决方案1】:

使用另一个变量像这样分配

contactAddtemp=ABAddressBookCopyArrayOfAllPeople(self.addressBook); 
self.contactAdd=(__bridge_retained CFArrayRef) CFBridgingRelease(contactAddtemp); 

它在 xcode 4.2 中对我有用,但是当我检查它在 4.6 中不起作用时,可能是因为它使用 ABAddressBookCreateWithOptions(NULL,NULL) 而不是 ABAddressBookCreate()

【讨论】:

  • 为什么要调用 CFBridgingRelease 然后立即使用 __bridge_retained 进行转换?
  • 它平衡了,但是这样做没有真正的意义,但它似乎在 xcode 4.2 中完成了工作
【解决方案2】:

使用 _addressbook 代替 self.addressBook。

【讨论】:

  • 这家伙是个传奇!
【解决方案3】:

In Core Foundation, Create and Copy functions return an ownership reference.

您需要通过在返回的对象(地址簿、人员数组以及您从此类函数中获得的任何其他内容)上调用 CFRelease 或使用 __bridge_transfer(或通过调用CFBridgingRelease):

self.addressBook = CFBridgingRelease(ABAddressBookCreateWithOptions(…));

【讨论】:

    猜你喜欢
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多