【问题标题】:iPad, iOS6 very long delay between viewWIllAppear and view appearing on the screeniPad,iOS6 viewWIllAppear 和视图出现在屏幕上之间的延迟很长
【发布时间】:2013-03-18 09:37:21
【问题描述】:

我正在使用一个相当复杂的基于故事板的 iPad 应用程序。我的工作流程如下一个集合视图推送另一个视图,它以模态方式呈现另一个视图。

模态呈现的第三个视图相当复杂,有 19 个子视图,其中一些是图像视图。该应用程序在 viewDidLoad 中组织视图层次结构方面做了很多工作。 viewWillAppear 或 viewDidAppear 中没有其他内容。

困扰我的是,如果我将日志记录语句放在 viewDidLoad 中,我会看到 viewDidLoad 在用户启动故事板 segue 后的 1.5 秒内完成。然后调用 viewWillAppear。 在那之后,屏幕会在那里停留 3 到 80 秒(是的,八十秒!)。 有时视图看起来相对较快,有时则需要很长时间。

这是我的 viewDidLoad 占用太多内存的症状吗? 换句话说,延迟是因为 iOS 清理了足够的内存以使我的视图出现吗?

在 xCode 中点击停止按钮后,我重新启动应用程序,执行一系列步骤以呈现视图控制器,这是第一次运行:

/

/80 seconds!
    2013-03-27 22:56:30.311 iconmaker[2076:907] -[GLFirstViewController viewWillAppear:] [Line 597] viewWillAppear
    2013-03-27 22:57:50.351 iconmaker[2076:907] -[GLFirstViewController viewDidAppear:] [Line 604] viewDidAppear

//after popping the view controller and repeating:
//less than 2 seconds
2013-03-27 22:59:23.698 iconmaker[2076:907] -[GLFirstViewController viewWillAppear:] [Line 597] viewWillAppear
2013-03-27 22:59:24.306 iconmaker[2076:907] -[GLFirstViewController viewDidAppear:] [Line 604] viewDidAppear

更新:关闭设备,然后重新启动后,视图控制器的显示速度非常快,第一次运行不到 2 秒。这是推送/弹出控制器 4 次后的分配分析。

这是内存释放问题吗?

【问题讨论】:

    标签: ipad memory-management ios6 uiviewcontroller uistoryboard


    【解决方案1】:

    在分析应用程序后,我发现有两个问题在起作用:

    1) 我将大型 UIImages 作为二进制数据保存到 coredata 中,如果使用 NSFetchedResultsControllers,则不应这样做,因为它们会提取所有图像数据并将其保存在内存中。

    2) iOS6 改变了 viewDidUnload 的工作方式——它永远不会被调用,所以我添加了一些调用来在我的视图控制器消失时手动释放对象。

    最终结果是内存占用现在大约为 4mb 基线,随着我推动之前有问题的控制器而变得更高。此外,我可以多次推送/弹出控制器而不会出现内存不足的崩溃。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-12
      • 2021-09-21
      • 2011-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多