【问题标题】:Tabbed app + navigation controller: how to release stacked UIViewControllers when pressing a tab?选项卡式应用程序 + 导航控制器:按下选项卡时如何释放堆叠的 UIViewControllers?
【发布时间】:2011-12-12 09:33:14
【问题描述】:

我有一个选项卡式应用程序,其中包含导航控制器和视图控制器。当我按下某个选项卡项并深入视图控制器层次结构(由导航控制器维护)时,当我直接按下选项卡项时会发生什么?恕我直言,所有视图控制器都在内存中的堆栈上,如果我从第一个视图控制器深处再次开始导航,那么我会将视图控制器的副本放在导航堆栈上。我应该如何进行正确的内存管理?恕我直言,当用户单击某个选项卡项时,我需要释放(弹出)屏幕上的所有视图控制器(第一个视图控制器除外)。如何实现?

【问题讨论】:

    标签: iphone objective-c memory-management uinavigationcontroller uitabbarcontroller


    【解决方案1】:

    系统会在需要内存时卸载不需要的视图(并在需要时重新加载它们),所以如果你正确地实现了viewDidUnloadreceivedMemoryWarning 方法,你应该没问题。视图控制器本身几乎不占用任何内存(除非您自己分配了大量的东西)。在任何情况下,它们都不是在堆栈上分配的,因为它们是在堆上分配的对象(一般目标 c 经验法则)。当你推送一个视图控制器时,它被保留,当你弹出一个视图控制器时,它被释放。通常你不会期望每个选项卡中的导航控制器会因为你按下另一个选项卡而弹回根目录,但如果你真的想这样做,那么你可以使用popToRootViewController 方法。

    【讨论】:

    • 谢谢。我只是想防止在导航堆栈上推送重复的视图控制器。例如,如果屏幕上已经推送了 5 个视图控制器,并且如果我按下标签栏并开始导航到深处,那么我是否在屏幕上推送了重复的视图控制器?恕我直言,我正在推送重复项,因为现有的没有弹出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2022-06-17
    相关资源
    最近更新 更多