2011-01-28 73 views
1

首先,对不起我的英语不好。我会尝试解释我的问题:NavigationController Stack

我有一个RootViewController(基于导航的项目)。因此,它显示的tableview当用户选择表(didSelectRowAtIndexPath方法)的y行执行以下操作以显示下图:

NextViewController *nextView = [[NextViewController alloc] initWithNibName:@"NextViewController" bundle:nil]; 
[self.navigationController pushViewController:nextView animated:YES]; 
[nextView release]; 

会发生什么,如果用户选择导航栏的后退按钮并选择再次行,并重复这样做?很多新的视图(NextViewController的实例)正在创建(大量的内存分配)?或者他只是导航栈?

你能帮我吗?我不想以这种方式浪费记忆(如果是这种情况)。 谢谢!

回答

1

如果用户切换来回从你的RootViewController的一个NextViewController多次,这里是发生了什么:

  1. 的NextViewController创建(alloc“d)在didSelectRowAtIndexPath:方法。因为你调用了一个init方法,所以你有责任释放它。
  2. 您将nextView推入导航控制器堆栈,该堆栈保留它。
  3. 你释放nextView,所以保留的唯一东西是导航控制器。
  4. 一旦您的用户从NextViewController返回,导航控制器将释放它。现在没有什么东西是保留nextView,所以它得到dealloc'd。内存被释放。

基本上,你创建一个NextViewController每个用户来回移动(你不“只是导航堆栈”,因为对象每次换水)时间,但你不漏一大量的内存或持有您创建的每个控制器。你的内存使用情况很好。

+0

非常感谢。现在,我很清楚:) – Samui 2011-01-28 19:52:26