- (void)tableView:(UITableView *)tableView
accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
NSUInteger row = indexPath.row;
if (row == NSNotFound)
return;
if (call.uid != kABRecordInvalidID)
{
ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook,
call.uid);
// CFRelease(addressBook);// commenting out this makes the program not crash
}
}
这是问题,静态代码分析告诉我,我有内存泄漏,因为我没有发布地址簿。我尝试释放它,但如果我返回到它被释放的屏幕并再次调用此函数,应用程序崩溃。
想象一下,我点击uitableview
的附件按钮。我做我必须做的事情并返回到原始窗口,然后再次单击uitableview
的附件按钮,程序崩溃并出现此错误:
- [Not A Type retain]:发送到解除分配的实例0x618d810的消息
答案 0 :(得分:8)
地址簿不会导致崩溃(直接)。
你没有留住你的人,你只是在提及他/她。尝试在您的人身上使用CFRetain
。
ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook,
call.uid);
CFRetain(person);
CFRelease(addressBook);