ABMultiValueCopyValueAtIndex 允许发布两次?
Posted
技术标签:
【中文标题】ABMultiValueCopyValueAtIndex 允许发布两次?【英文标题】:ABMultiValueCopyValueAtIndex allow release twice? 【发布时间】:2011-05-17 11:29:37 【问题描述】: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);
为什么label可以释放两次而没有任何错误?但手机不能。 如果两次不释放 label 是否有内存泄漏?
我已经在 xcode4 模拟器 4.3 中成功运行了上面的代码
【问题讨论】:
试试这个 NSLog ([NSString stringWithFormat:@"Label retainCount : %d", [label retainCount]]);在您执行 CFRelease 并查看调试器中显示的内容之后 标签retainCount 为:2 => 1 => 1 手机retainCount 为:2 => 1 ABAddressBookRef 从 ABAddressBookCreate() 返回 retainCount 是:1. CFArrayRef 从 ABAddressBookCopyArrayOfAllPeople() 返回 retainCount 是:1. ABRecordRef 从 CFArrayGetValueAtIndex() 返回 retainCount 是:2. 有什么想法吗? 【参考方案1】:为什么这不会崩溃并不重要。你绝对不应该这样做。这个函数与你的约定是它返回一个你必须只释放一次的值。不管它在内部对这个值做了什么(例如缓存),这可能导致它不崩溃是无关紧要的。
【讨论】:
以上是关于ABMultiValueCopyValueAtIndex 允许发布两次?的主要内容,如果未能解决你的问题,请参考以下文章