【发布时间】: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. 有什么想法吗?
标签: iphone objective-c memory-leaks release addressbook