viewWillAppear和viewDidAppear之间会发生什么?

时间:2012-10-20 18:48:50

标签: iphone ios performance cocoa-touch uiviewcontroller

我正在优化我的设备上看起来很慢的转换。当我选择UIViewController行时,我会从另一个UITableView推送viewWillAppear。在选择行之后和按下新视图之前会有明显的暂停。

有些日志记录表明我的所有代码都相当快,从行选择到推送控制器viewWillAppear。但是viewDidAppear和{{1}}之间的时间记录在0.7秒左右。

过渡本身(我相信)应该只需0.3秒。什么可以解释其余部分?

我正在测试iPhone 4,所以我不期待最快的表现。但我应该能够在同一设备上匹配其他类似应用程序的相同性能,不是吗?

2 个答案:

答案 0 :(得分:2)

几个星期前我有类似的问题,我写了一篇关于我发现的内容的博客文章:

http://bradbambara.wordpress.com/2014/07/31/object-life-cycle-uiviewcontroller/

TL; DR版本是iOS将:

  • 执行新场景的布局
  • 执行过渡到新场景(如果它是动画过渡)

...所以我的猜测是延迟可能是由于特别长时间的过渡造成的,或者您是否在布局代码中进行了任何性能密集型工作。

答案 1 :(得分:1)

  

过渡本身(我相信)应该只需0.3秒。什么可以解释其余部分?

资源通常采用以下方法:drawRect:layoutSubviewsviewDidLoadviewWillAppear:。此外,从NIB加载可能需要相当多的时间。

viewWillAppear:之后,iOS会生成新(可能是当前)视图的快照,以在两个屏幕之间执行平滑动画。因此,请确保两个控制器视图的绘图和布局代码足够快。