我怎么能避免泄漏这个Core Foundation对象?

时间:2010-03-10 21:46:19

标签: iphone cocoa memory-management memory-leaks core-foundation

以下泄漏:

CFStringRef labelName = ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(aMultiRef, indexPath.row));
    cell.textLabel.text = (NSString *)labelName;
    CFRelease(labelName);

想知道是否有办法重写它,所以它不会泄漏而不会爆发&将ABMultiValueCopyLabelAtIndex(aMultiRef, indexPath.row)分配给CFStringRef然后我需要手动CFRelease 2行?当然,做到这一点并不是什么大不了的事......我只是好奇。

修改CFAutoRelease会有效吗?看下面的评论

2 个答案:

答案 0 :(得分:2)

由于Copy / Get语义,您需要发布带有Copy的API中的任何内容。 ABMultiValueCopyLabelAtIndex符合该要求,因此很遗憾,您需要获取此引用并稍后将其发布。

答案 1 :(得分:0)

您可以使用Objective-C自动释放(只要您有一个游泳池)。先投入id。例如。 [(id)labelName autorelease]将正常工作,它完全合法(因为CFStringRef与NSString桥接并且免费)。你可以用任何基于CoreFoundation的类型实现这一点,虽然我不相信苹果公开公开记录这一点,但理论上,这可能会改变。