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

问题描述:

我正在使用一个相当复杂的故事板的iPad应用程序。我的工作流程如下收集视图推送另一个视图,该视图以模态方式呈现另一个视图。iPad,iOS6 viewWIllAppear和视图之间很长的延迟出现在屏幕上

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

令我困惑的是,如果我把日志语句放在viewDidLoad中,我发现viewDidLoad在用户启动storyboard 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次后的分配分析。

enter image description here

这是一个内存释放问题?

剖析应用程序后,我想通了,两个问题在起作用:

1)我节省大量UIImages作为binarydata到coredata,如果使用NSFetchedResultsControllers这不应该做的,因为他们拉出所有的图像数据并保存在内存中。

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

最终的结果是,内存占用量现在在基线4mb左右,随着我推动以前违规的控制器而变得更高。另外,我可以在无内存崩溃的情况下多次推/控制控制器。

enter image description here