iPad,iOS6在viewWIllAppear和屏幕上出现的视图之间有很长的延迟

时间:2013-03-28 03:04:50

标签: ipad memory-management ios6 uiviewcontroller uistoryboard

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

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

让我困扰的是,如果我将日志语句放在viewDidLoad中,我会看到viewDidLoad在用户启动故事板segue的1.5秒内完成。然后调用viewWillAppear。 之后,屏幕位于3到80之间(是,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次后的分配配置文件。

enter image description here

这是一个内存释放问题吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

enter image description here