慢UIViewController加载时间(慢ClientState警告)
自从我将旧应用程序转换为iOS 6后,我开始在控制台中收到以下消息。
WARNING: Slow defaults access for key ClientState took 0.023656 seconds, tolerance is 0.020000
除了将我的代码从iOS 5更新到iOS 6之外,我还切换到了自动布局。 我运行了Instruments / Time Profiler,我的rootViewController
中的rootViewController
就是问题所在。 每当我切换视图控制器时,它都会吸引大部分时间,(无论我是否必须实例化视图控制器或重新使用已存在的视图控制器)。
window.rootViewController = myViewController;
我知道这个方法表面上做了什么,但我不确定幕后会发生什么…现在会导致它变慢的原因以及我该怎样做才能加快速度呢?
编辑:我已经尝试将我的故事板关闭自动布局,问题消失了(当然我的UI布局是乱七八糟的)。 所以显而易见的结论是,它是关于自动布局的。 我可能只有不到70个视图,所有这些视图都在屏幕上组合在一起,并且需要各种约束来展示它们。 我很难相信自动布局要慢得多(从关闭自动布局的~80ms到打开自动布局的~1370ms)。
屏幕上有70个视图听起来很多! 我的建议是以某种方式使其更简单 :
-
你真的需要同时获得所有70个观看次数吗?
-
检查所有视图是否需要自动布局,尽可能将其删除
- 有些观点可以被图形取代吗? 我使用了视图,例如阴影,可能是图像
你可以将storyBoard分成几个较小的,例如一个用于登录,细节,编辑模式等。部分缓慢可能来自系统必须处理(太)大故事板。
考虑使用2个视图控制器创建一个新项目并测试切换速度。 每个iOS应用程序都有一个窗口,一个根视图控制器和一个视图控制器。 问题不太可能像你希望的那样狭隘和明确。 每个视图控制器加载什么? 你检查了底层代码吗? app delegate是否对初始化或更改根视图控制器做了什么?