我正在密切关注我的应用程序开发的开始时间。在main
中,我使用CFAbsoluteTimeGetCurrent()
存储开始时间,并记录调用didFinishLaunchingWithOptions
时的已用时间,以及初始化和绘制StopWatchView
期间以及最后{主视图控制器的{1}}。这非常适合我弄清楚我的开始时间在哪里并保持检查。我在实际设备上的启动性能测试是在iPhone 3G(iOS 4.2.1)和iPhone 4上完成的。
由于将设备升级到iOS 5.1,我也被迫将Xcode升级到4.3.1版本。我立即注意到iPhone 4的启动时间发生了巨大变化。所有测量都是在附加Xcode进行调试的情况下进行的,从控制台中的日志中读取经过的时间。现在我还添加了调试标签,显示已经过的时间,无需连接调试器即可进行测量。
为了消除更改是由我的代码中的某些内容引起的可能性,我创建了新的Utility Application并确认了减速。 iPhone 4曾经比iPhone 3G快3倍,现在它开始比3G慢(!!!)。启动时间也变得非常不稳定(+ - 0.3s),其中曾经是+ -0.05s。飞行模式下波动性消失,所以我怀疑它是由与iCloud相关的一些后台进程引起的。然而,在升级前后iPhone 4上的启动时间减少了3倍,我感到非常困惑。
以下是平均启动时间,首先是在Xcode中调试(然后没有Xcode):
viewDidAppear
我不知道这是由iOS 5.1或Xcode 4.3.1引起的还是这是iPhone 4的具体问题。有人看到类似的减速吗?
答案 0 :(得分:1)
在进一步调查中,我注意到在分析期间(在观看WWDC 2012会话235“iOS应用程序性能 - 响应性”之后),我注意到的时间差异归因于对_UIAccessibilityInitialize
的调用。
我一直在测试我的应用的辅助功能,并启用了设置> 辅助功能> Tripple-click Home >的向即可。这与5.1更新的发布同时发生,我错误地将问题归结为新版本。我想操作系统必须初始化辅助功能机制,以便您可以随时打开 VoiceOver ,而无需重新启动所有打开的应用程序。
据我所知,启用可访问性对性能的影响尚未明确记录。因此,为了节省其他性能和可访问性有意识的开发人员,我们知道即使使用Tripple点击Home set to Ask,您也要支付_UIAccessibilityInitialize
的费用。
我也准备设计一个方案来懒散地进行自定义accessibilityLabels,因为它们对我的应用程序在正常使用中的响应性有不可忽视的影响。我想毕竟没有免费的午餐; - )