gpt4 book ai didi

ios - 导航 Controller 栈

转载 作者:行者123 更新时间:2023-11-29 13:50:35 26 4
gpt4 key购买 nike

首先,抱歉我的英语不好。我将尝试解释我的问题:

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

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

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

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

最佳答案

如果用户反复在 RootViewController 和 NextViewController 之间来回切换,会发生以下情况:

  1. NextViewController 在您的 didSelectRowAtIndexPath: 方法中创建(alloc)。因为您对其调用了 init 方法,所以您负责释放它。
  2. 您将 nextView 插入导航 Controller 堆栈,该堆栈会保留它。
  3. 您释放了 nextView,因此唯一保留的是导航 Controller 。
  4. 一旦您的用户从 NextViewController 移回,导航 Controller 就会释放它。现在没有任何内容保留 nextView,因此它会被 dealloc 处理。内存已释放。

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

关于ios - 导航 Controller 栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4832339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com