导航控制器堆栈
Posted
技术标签:
【中文标题】导航控制器堆栈【英文标题】:NavigationController Stack 【发布时间】:2011-01-28 19:38:44 【问题描述】:首先,对不起我的英语不好。我将尝试解释我的问题:
我有一个 RootViewController(基于导航的项目)。因此,它显示了 tableview,当用户选择表的一行时 (didSelectRowAtIndexPath) y 执行以下操作以显示下一个视图:
NextViewController *nextView = [[NextViewController alloc] initWithNibName:@"NextViewController" bundle:nil];
[self.navigationController pushViewController:nextView animated:YES];
[nextView release];
如果用户选择导航栏的后退按钮并再次选择行,并重复执行此操作,会发生什么情况?正在创建大量新视图(NextViewController 的实例)(大量内存分配)?还是他只是在堆栈中导航?
你能帮帮我吗?我不想以这种方式浪费内存(如果是这样的话)。 谢谢!
【问题讨论】:
【参考方案1】:如果用户反复从您的 RootViewController 切换到 NextViewController,会发生以下情况:
-
NextViewController 在您的
didSelectRowAtIndexPath:
方法中创建(alloc
'd)。因为您在其上调用了init
方法,所以您有责任释放它。
您将nextView
推送到导航控制器堆栈上,它会保留它。
你释放了nextView
,所以唯一有保留的就是导航控制器。
一旦您的用户从 NextViewController 移回,导航控制器就会释放它。现在没有任何东西保留nextView
,所以它得到dealloc
'd。内存被释放。
基本上,每次用户来回移动时,您都会创建一个 NextViewController(您不是“只是在堆栈中导航”,因为对象每次都在变化),但您并没有泄漏大量内存或保留您创建的每个控制器。您的内存使用情况很好。
【讨论】:
以上是关于导航控制器堆栈的主要内容,如果未能解决你的问题,请参考以下文章