以下代码创建了许多我不明白的泄漏,因为我释放了使用 Create 或 Copy 创建的所有对象。我没有广泛使用 CF 对象,因此我可能对保留周期有误解。如有任何帮助,我们将不胜感激:
ABMutableMultiValueRef webServices = ABRecordCopyValue(aRecord, kABPersonInstantMessageProperty);
for (CFIndex i = 0; i < ABMultiValueGetCount(webServices); i++) {
CFDictionaryRef webService = CFDictionaryCreateCopy(NULL, ABMultiValueCopyValueAtIndex(webServices, i));
webServiceLabel = ABMultiValueCopyLabelAtIndex(webServices, i);
webServiceProvider = CFDictionaryGetValue(webService, kABPersonInstantMessageServiceKey);
webServiceUserName = CFDictionaryGetValue(webService, kABPersonInstantMessageUsernameKey);
// Data to be saved at this point
if (webService) CFRelease(webService);
if (webServiceLabel) CFRelease(webServiceLabel);
}
if (webServices) CFRelease(webServices);
最佳答案
这是你的问题:
CFDictionaryRef webService = CFDictionaryCreateCopy(NULL, ABMultiValueCopyValueAtIndex(webServices, i));
ABMultiValueCopyValueAtIndex
创建一个从未分配给变量的对象。它需要被释放,但从来没有被释放过。这是内存泄漏。
关于objective-c - 使用 CFDictionaryRef 和 ABMutableMultiValueRef 的无法解释的泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1612829/