iphone - iOS Storyboard 模态序列和内存

标签 iphone ios objective-c ipad uiviewcontroller

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

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

现在,这些 ViewController 已在 Storyboard 中设置(现在有 13 个),并且以模式方式从一个到下一个,然后以编程方式关闭以返回。

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

我的问题是:

  1. 无论我做什么,它们都会驻留在真实内存中吗? (我以为我没有持有任何指向这些 View Controller 的强指针)。
  2. 有没有一种简单的方法可以让我关闭一个 Controller 并仍然使用模态转场进入下一个 Controller ?(尝试此操作时遇到了麻烦)
  3. 模态 Segues 可能不是我在应用程序中应该做的事情的方式,不是吗?!对于我的“故事书”来说,它们看起来是如此美好和轻松,但现在它们却让我度过了一段非常艰难的时光。
  4. 如果您能根据我的描述向我提供任何其他提示,我们将不胜感激。

谢谢。

最佳答案

  1. 是的,只要您以模态方式呈现即可。呈现者 View Controller 保留指向呈现 View Controller 的强指针。您可以在 viewWillDisappear 中执行以下操作:释放所有可能使用内存的图像和其他 View !
  2. 您可以使用 instantiateViewControllerWithIdentifier: 方法实例化您的 View Controller ,然后呈现ViewController:animated:completion: 就像您对任何 View Controller 所做的那样
  3. 这由您决定。但如果您愿意,您可以轻松模仿动画。
  4. 如果我理解正确的话,我会选择一个类似于“AudioEngine”的单例类,它可以从任何类的任何地方访问。然后我会像你一样在 Storyboard中设计所有 View Controller 。当我需要以模态方式呈现另一个 View Controller 时,我将使用第二个问题的答案来完成。如果我仍然有内存问题,我会尝试作弊并始终保留 3 个 View Controller (就像我们对 UIScrollView 的无限滚动所做的那样),我将重用它们,并且我将使用 UIView 的动画 block 来模仿模式呈现。

关于iphone - iOS Storyboard 模态序列和内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18596817/

相关文章:

ios - trigger.io 错误 device-ios.app/Forge 格式错误的对象

ios - 动画宽度约束时 UITextField 文本跳转

objective-c - AF联网进展

iOS 9 和 NSAppTransportSecurity

iPhone:安全容器

iphone - 如何禁用水平拖动? (webkit-溢出-滚动 : touch;)

ios - 如何检查静态库中的类是否可用?

ios - 如何在 UINavigationController 中插入 UITableView

iphone - 后退按钮的自定义 UIBarButtonItem

ios - 如何连接 Storyboard中的原型(prototype)单元?