我怎样才能pipe理视图控制器无限推动到导航控制器堆栈? iOS版

我有一个由UINavigationController组成的应用程序,它从3个不同的选项卡中推送ViewControllers。

我预见到的麻烦是,目前的结构允许用户无休止地将VC添加到堆栈。

我有一个叫药品的标签,另一个叫病原体。 如果您深入了解药物,您可以查看其有效防治的病原体列表,并且用户可以select一种病原体以查看有关该病原体的更多信息。 这导致应用程序推动一个新的病原体VC。

现在,用户可以深入到病原体易感染的药物列表中,并select它,这在药物标签中导致新的VC。

等等等等…

每次有额外的1.5Mb添加到内存占用。

我怎样才能最好地pipe理这个?

您应该通过释放资源来减less内存占用 ,您可以轻松地重新创build,而不是试图阻止用户将100个视图控制器推送到您的堆栈。 苹果也不这样做。

打开“iTunes Store”应用程序并search“Hugh Laurie”,select专辑“Let Them Talk”,然后select“Hu Laurie>”,然后select“Let them Talk”,然后select“Huur Laurie>”等。 你可以继续前进和前进。 当用户这么做了很长一段时间,应用程序可能会耗尽内存和崩溃。

如果您尝试将20吨砖块装载到丰田皮卡上,它可能会像空卡普里太阳袋一样被砸碎。 这是故意的破坏性行为 ,恕我直言,应用程序终止,如果用户强行尝试超载它是可以的。

在这里输入图像说明

但是,您可以使这一点几乎无法访问,因此通过释放离屏视图控制器中的内存,这种情况不太可能发生。 实现didReceiveMemoryWarning (例如: 如何实现didReceiveMemoryWarning? )来释放您可以轻松地从磁盘或networking(图像,核心数据对象等)重新创build的东西。 这样,你可以把你的内存占用方式降低,用户只有在手上有几个小时的时候才能使你的应用崩溃,没有比推送视图控制器更好的了。 这将是悲伤。

你可以实现你自己的UINavigationController子类。 你至less需要实现pushViewController:animated:popViewControllerAnimated: 在推送过程中,你会放弃其中一个视图控制器(从而释放内存),在popup窗口中,使用你保留的数据再次创build它。 基本上,您将从保持整个视图控制器堆栈切换到只有几个元素,用逻辑还原堆栈下的那些元素。

这是一个简单的描述。 在实际的应用程序中,您至less要保留前一个视图控制器,以便您的后退button和从侧面滑动的后退手势顺利运行。