故事板+模态搜索+记忆

Posted

技术标签:

【中文标题】故事板+模态搜索+记忆【英文标题】:Storyboard+Modal Segue + Memory 【发布时间】:2013-01-04 20:10:35 【问题描述】:

我有一个包含 6 个视图控制器及其各自视图的故事板。我确实没有有任何导航控制器与这 6 个视图控制器相关联。

要从一个视图控制器转到另一个视图控制器,滑动手势识别器与模态转场一起使用。所有视图控制器都有 aleast 1,有时甚至有两个基于滑动手势的模态 segues 到其他视图控制器。

我的问题是,我需要担心内存吗?当我滑动这些视图控制器时,这些视图控制器是否会无限地添加到内存中,最终导致应用程序崩溃?

一个例子可能是:假设我在第一个 VC 中,我向右滑动到第二个 VC,然后再次向右滑动到第三个 VC,然后向左滑动两次以返回到第一个 VC 内存是否会包含这个:

内存:第一个 VC,第二个 VC,第三个 VC,第二个 VC 的另一个副本,第一个 VC 的另一个副本?

我知道这似乎是一个愚蠢的问题,但由于我几天前才开始编程,我非常担心我会遇到内存问题。

非常感谢您的想法以及任何可能对讨论此问题的地方有用的链接。

【问题讨论】:

【参考方案1】:

您有一个很好的问题,这取决于您如何创建和关闭视图控制器。通常,您提到的设计将使用 UINavigationController 或 UIPageViewController 等内置控制器构建,或者可能使用滚动视图。

如果您要“展示”新的视图控制器,那么您需要关闭它们以移除它们。如果您不解雇,那么您的视图控制器将继续存在。

如果您使用的是 segue,请记住每个 segue 都会创建一个新实例。

如果您的逻辑通常说 - 向右滑动:新模式转场,向左滑动:关闭,那么您将在进行时进行清理。如果每次向右滑动都可以创建一个新实例,则此方法有效。

如果您需要六个视图控制器一直保留在内存中,您可能需要考虑使用 pageViewController 或推出您自己的解决方案。我已经看到了一些不错的解决方案,就像您使用滚动视图描述的那样。

如果你想使用滚动视图,基本上你会创建一个数组,用视图控制器的六个实例加载数组,然后加载滚动视图以进行水平滚动。为左/右滑动添加手势识别器和逻辑,您就有了一个不错的水平页面滚动条。

这是一个非常好的参考和教程,似乎可以解决您所描述的解决方案。 http://www.wannabegeek.com/?p=168

祝你好运,新年快乐。

【讨论】:

感谢非常有帮助和全面的回答!我实际上有两个滑动手势和 2 模态转场..所以实际上它向右滑动:新模态转场,向左滑动(返回):新模态转场,这是我的记忆迅速上升的地方。 查看我包含的项目。如果您的应用程序只有六个选项,您可以将它们全部实例化并在需要时将它们保存在内存中 - 它不是很多,基本上这就是标签栏控制器所做的。理想情况下,您只会在需要时初始化它们。您可能需要研究委托模式 - 这样您就可以轻松关闭视图控制器,否则您将继续存在内存问题。【参考方案2】:

只要您不保留对视图(或其子视图,如按钮...)的强引用,它们就会在需要时被释放。

【讨论】:

以上是关于故事板+模态搜索+记忆的主要内容,如果未能解决你的问题,请参考以下文章

故事板无需单击按钮即可应用推送(模态,推送,自定义)

iPad 故事板应用程序 - 弹出框和模态代表

通过应用程序的故事板保持导航控制器

带有 ios 故事板的标签栏

故事板,self presentViewController,iOS 6,空白屏幕

故事板中的PresentModalViewController以编程方式iOS 5