iOS故事板模态段和内存

时间:2013-09-03 16:06:38

标签: iphone ios objective-c ipad uiviewcontroller

我的应用程序“简短”描述:

基本上是一个交互式故事书,我有一个类,它设置一个音频会话和音频播放器,我的应用程序中的每个其他类(ViewControllers)都会导入并调用一个或两个函数来设置每次发生时播放的正确声音(例如..用户阅读故事)。每个ViewController都有自己的.m和.h类,并将它们用于动画和动作处理。我的应用程序大小只有大约60 mb(音频/图像/代码)。

现在这些ViewControllers都设置在一个故事板中(现在它们已经是13个),并且从一个到下一个是模态的,然后以编程方式解除后退。

当我现在在我的iPad上运行我的应用程序时,我开始收到内存警告,而且仪器正在向我显示我的应用程序正在为我认为的每个ViewController添加大约40 Mb的内容。

我的问题是:

  1. 无论我做什么,他们都会留在真实记忆中吗? (我以为我没有对这些视图控制器持任何强烈的指示。)
  2. 我有一个简单的方法可以解雇一个控制器并仍然使用模态segue到达下一个控制器吗?(遇到麻烦试试这个)
  3. Modal Segues可能不是我应该在我的App中做事的方式吗?对于我的“故事书”来说,它们看起来非常好用,但是现在它们给了我一个非常艰难的时间。
  4. 您可以从我所描述的内容中获得任何其他提示。
  5. 谢谢。

1 个答案:

答案 0 :(得分:3)

  1. 是的,只要你以模态方式呈现它。演示者视图控制器保持指向所呈现的视图控制器的强指针。你在这里可以做的是在viewWillDisappear中:释放所有可能使用内存的图像和其他视图!
  2. 您可以使用方法instantiateViewControllerWithIdentifier来实例化您的视图控制器:然后使用presentViewController:animated:completion:就像使用任何视图控制器一样
  3. 由你来决定。但如果你愿意的话,你可以很容易地模仿动画。
  4. 如果我理解了一切,我会选择一个类似'AudioEngine'的单例类,可以从任何类的任何地方访问。然后我会像你一样在我的故事板中设计我的所有viewcontrollers。当我需要以模态方式呈现另一个视图控制器时,我将使用您的第二个问题的答案来完成它。如果我仍然有内存问题,我会尝试作弊并始终保持3个视图控制器(就像我们使用UIScrollView的无限滚动一样),我会重复使用,我会使用UIView的动画块模仿模态演示。