ABMultiValueCopyValueAtIndex允许发布两次?

时间:2011-05-17 11:29:37

标签: iphone objective-c memory-leaks release addressbook

ABMultiValueRef phones = ABRecordCopyValue(ref, kABPersonPhoneProperty);
if ( phones ) {
    for(int i=0;i<ABMultiValueGetCount(phones);i++) {
        NSString* label=(NSString*)ABMultiValueCopyLabelAtIndex(phones, i);
        CFRelease ((CFTypeRef)label);
        CFRelease ((CFTypeRef)label);
    }
}
CFRelease(phones);

为什么标签可以发布两次而没有任何错误?但手机不能。 如果没有两次释放标签,是否有任何内存泄漏?

我在xcode4模拟器4.3中成功运行了以上代码

1 个答案:

答案 0 :(得分:0)

为什么这不会崩溃并不重要。你绝对不应该这样做。此功能与您签订的合同是它返回一个您必须完全释放的值。无论它在内部如何处理这个值(例如缓存)都可能导致这种情况不会崩溃是无关紧要的。