使用Xcode 4.3.1编译的iPhone 4,iOS 5.1启动速度较慢的应用程序?

时间:2012-03-20 00:10:01

标签: ios5.1

我正在密切关注我的应用程序开发的开始时间。在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的具体问题。有人看到类似的减速吗?

1 个答案:

答案 0 :(得分:1)

在进一步调查中,我注意到在分析期间(在观看WWDC 2012会话235“iOS应用程序性能 - 响应性”之后),我注意到的时间差异归因于对_UIAccessibilityInitialize的调用。

我一直在测试我的应用的辅助功能,并启用了设置> 辅助功能> Tripple-click Home >的即可。这与5.1更新的发布同时发生,我错误地将问题归结为新版本。我想操作系统必须初始化辅助功能机制,以便您可以随时打开 VoiceOver ,而无需重新启动所有打开的应用程序。

据我所知,启用可访问性对性能的影响尚未明确记录。因此,为了节省其他性能可访问性有意识的开发人员,我们知道即使使用Tripple点击Home set to Ask,您也要支付_UIAccessibilityInitialize的费用。

我也准备设计一个方案来懒散地进行自定义accessibilityLabels,因为它们对我的应用程序在正常使用中的响应性有不可忽视的影响。我想毕竟没有免费的午餐; - )