2

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

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

现在这些 ViewController 被设置在一个故事板中(它们现在是 13 个),并且从一个到下一个是模态的,然后以编程方式关闭以返回。

当我现在在我的 iPad 上运行我的应用程序时,我开始收到内存警告,是的 Instruments 向我显示,我的应用程序为我继续使用的每个 ViewController 添加了大约 40 Mb。

我的问题是:

  1. 无论我做什么,它们都存在于真实记忆中吗?(我以为我没有对这些视图控制器持有任何强指针)。
  2. 有没有一种简单的方法可以让我关闭一个控制器并仍然使用模态 segue 来到达下一个控制器?(在尝试这个时遇到了麻烦)
  3. 模态序列可能不是我应该在我的应用程序中做事的方式,是吗?!。对于我的“故事书”来说,它们看起来既漂亮又容易,但现在它们给了我一个非常艰难的时期。
  4. 您可以从我所描述的内容中给我任何其他提示,我们将不胜感激。

谢谢你。

4

1 回答 1

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