NavigationController堆栈

时间:2011-01-28 19:38:44

标签: ios uinavigationcontroller

首先,抱歉我的英语不好。我会试着解释一下我的问题:

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

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

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

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

1 个答案:

答案 0 :(得分:1)

如果用户反复从RootViewController切换到NextViewController,则会发生以下情况:

  1. alloc方法中创建了NextViewController(didSelectRowAtIndexPath:'d)。因为您在其上调用了init方法,所以您负责释放它。
  2. nextView推到导航控制器堆栈上,然后保留它。
  3. 你释放nextView,所以保留它的唯一东西就是导航控制器。
  4. 一旦您的用户从NextViewController返回,导航控制器就会释放它。现在没有任何内容保留nextView,因此获得dealloc'd。释放了内存。
  5. 基本上,每次用户来回移动时都会创建一个NextViewController(你不是“只是导航堆栈”,因为对象 每次都在改变),但你不是泄漏大量内存或保留您创建的每个控制器。你的内存使用情况很好。