j2e*_*nue 3 memory-management addressbook ios
- (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
}
}
Run Code Online (Sandbox Code Playgroud)
这是问题,静态代码分析告诉我,我有内存泄漏,因为我没有发布通讯录.我尝试释放它,但如果我返回到它被释放的屏幕并再次调用此函数,应用程序崩溃.
所以想象一下我点击附件按钮uitableview.我做我必须做的事情并返回到原始窗口,然后再点击uitableview再次的附件按钮,程序崩溃并出现此错误:
- [Not A Type retain]:发送到解除分配的实例0x618d810的消息
地址簿不是造成崩溃的原因(直接).
你没有留住你的人,你只是在提及他/她.尝试使用 CFRetain你的人.
ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook,
call.uid);
CFRetain(person);
CFRelease(addressBook);
Run Code Online (Sandbox Code Playgroud)