【问题标题】: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 的实例)(大量内存分配)?还是他只是在堆栈中导航?

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

【问题讨论】:

    标签: ios uinavigationcontroller


    【解决方案1】:

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

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

    基本上,每次用户来回移动时,您都会创建一个 NextViewController(您不是“只是在堆栈中导航”,因为对象每次都在变化),但您并没有泄漏大量内存或保留您创建的每个控制器。您的内存使用情况很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      • 2012-05-04
      • 1970-01-01
      相关资源
      最近更新 更多