在iPhone navigationController pushViewController之后发布

时间:2011-08-25 01:19:49

标签: iphone uitableview uinavigationcontroller

我对以下代码非常困惑:

- (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,这已经发布了。如果我不释放一切完美的工作,即使我反复推动和弹出视图控制器,仪器也不会显示任何泄漏。

2 个答案:

答案 0 :(得分:0)

您必须释放它,因为当您按下视图控制器时,导航控制器将获得该控制器的所有权。

我认为您的应用可能存在一些视图层次结构问题。您可以检查一下吗?

答案 1 :(得分:0)

我只能猜测RPSAdvisorViewController存在问题。你能尝试用占位符UIViewController替换它,看看会发生什么?