内存泄漏在NSObject的分配
问题描述:
HI,我正在逐渐NSObject的分配,即内存泄漏,内存泄漏在NSObject的分配
ContactDTO* contactDTO = [[ContactDTO alloc] init];
代码:
+(ContactDTO*) getContactDTOForId:(NSString*) contactId
{
NSString* homeMail [email protected]"";
NSString* [email protected]"";
NSString *[email protected]"";
NSString *[email protected]"";
firstNameString = [AddressBookUtil getValueForProperty:kABPersonFirstNameProperty forContact:contactId];
lastNameString = [AddressBookUtil getValueForProperty:kABPersonLastNameProperty forContact:contactId];
ABRecordID contactIntId = [contactId intValue];
ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook, contactIntId);
ABMultiValueRef emailMultiValue =(NSString *)ABRecordCopyValue(person, kABPersonEmailProperty);
for(CFIndex j=0;j<ABMultiValueGetCount(emailMultiValue);j++)
{
NSString* curentTypeLabel =(NSString *)ABMultiValueCopyLabelAtIndex(emailMultiValue,j);
if([curentTypeLabel isEqualToString:@"_$!<Home>!$_"]==YES)
{
NSString* currentEmail =(NSString *)ABMultiValueCopyValueAtIndex(emailMultiValue,j);
if([currentEmail isEqualToString:nil]==NO)
{
homeMail = [currentEmail copy];
}
}
if([curentTypeLabel isEqualToString:@"_$!<Work>!$_"]==YES)
{
NSString* currentEmail =(NSString *)ABMultiValueCopyValueAtIndex(emailMultiValue,j);
if([currentEmail isEqualToString:nil]==NO)
{
workMail = [currentEmail copy];
}
}
}
ContactDTO* contactDTO = [[ContactDTO alloc] init];
contactDTO.firstName = firstNameString;
contactDTO.lastName = lastNameString;
contactDTO.contactId = contactId;
contactDTO.homeEmail = homeMail;
contactDTO.workEmail = workMail;
return [contactDTO autorelease];
}
答
当从地址簿读取电子邮件地址使用ABMultiValueCopyValueAtIndex()
返回由您拥有的参考资料(例如必须由您使用CFRelease()
发布),[obj copy];
也一样。
我假设你在你的dealloc方法中释放homeMail
和workMail
,但是来自地址簿的复制值似乎在这种方法中泄漏。
我完成了它作为你的建议,但仍然进出内存泄漏在同一个地方。你给任何其他建议,摆脱这? – 2010-03-23 12:39:35
第二次查看您的示例后,我发现您正在执行的'[currentEmail copy]'也是开销,只是将它们分配给它们(例如'workMail = currentEmail;')。但是我同意Isaac的观点,你应该明确地阅读“内存管理编程指南”,因为这些主题都包含在那里。 – Alfonso 2010-03-24 07:34:47