以下泄漏:
CFStringRef labelName = ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(aMultiRef, indexPath.row));
cell.textLabel.text = (NSString *)labelName;
CFRelease(labelName);
想知道是否有办法重写它,所以它不会泄漏而不会爆发&将ABMultiValueCopyLabelAtIndex(aMultiRef, indexPath.row)
分配给CFStringRef
然后我需要手动CFRelease
2行?当然,做到这一点并不是什么大不了的事......我只是好奇。
修改:CFAutoRelease
会有效吗?看下面的评论
答案 0 :(得分:2)
由于Copy / Get语义,您需要发布带有Copy
的API中的任何内容。 ABMultiValueCopyLabelAtIndex
符合该要求,因此很遗憾,您需要获取此引用并稍后将其发布。
答案 1 :(得分:0)
您可以使用Objective-C自动释放(只要您有一个游泳池)。先投入id。例如。 [(id)labelName autorelease]将正常工作,它完全合法(因为CFStringRef与NSString桥接并且免费)。你可以用任何基于CoreFoundation的类型实现这一点,虽然我不相信苹果公开公开记录这一点,但理论上,这可能会改变。