我对以下代码非常困惑:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
RPSAdvisorViewController *pushThis = [[RPSAdvisorViewController alloc]init];
pushThis.opponentName = [opponentArray objectAtIndex:indexPath.row];
[self.navigationController pushViewController:pushThis animated:YES];
//[pushThis release];
}
如果行[pushThis release]没有被注释掉,那么当我从该视图中退出时应用程序会崩溃。我以为我总是需要发布我分配的viewControllers,但这次应用程序不会让我。
我甚至尝试过测试这样的仪器泄漏而不释放pushThis,没有泄漏。
我真的很困惑,有人可以告诉我为什么我不想释放pushThis?
Edit1:崩溃会产生以下错误消息:
- [CALayer release]:发送到解除分配的实例0x4e66b20的消息
当导航控制器弹出视图控制器时,它会再次发送释放到pushThis,这已经发布了。如果我不释放一切完美的工作,即使我反复推动和弹出视图控制器,仪器也不会显示任何泄漏。
答案 0 :(得分:0)
您必须释放它,因为当您按下视图控制器时,导航控制器将获得该控制器的所有权。
我认为您的应用可能存在一些视图层次结构问题。您可以检查一下吗?
答案 1 :(得分:0)
我只能猜测RPSAdvisorViewController
存在问题。你能尝试用占位符UIViewController替换它,看看会发生什么?