2

我正在密切关注我的应用程序在开发中的开始时间。在main我存储开始时间使用CFAbsoluteTimeGetCurrent()和记录didFinishLaunchingWithOptions被调用时的经过时间,以及在我的初始化和绘画期间StopWatchView,最后在viewDidAppear主视图控制器中。这对我弄清楚我的开始时间去哪里并保持控制非常有用。我在实际设备上的启动性能测试是在 iPhone 3G (iOS 4.2.1) 和 iPhone 4 上完成的。

自从将设备升级到 iOS 5.1 后,我也被迫将 Xcode 升级到了 4.3.1 版本。我立即注意到 iPhone 4 的启动时间发生了巨大变化。所有测量都是在附加 Xcode 以进行调试的情况下执行的,从控制台中的日志中读取经过的时间。现在我还添加了显示经过时间的调试标签,以便能够在没有附加调试器的情况下进行测量。

为了消除更改是由我的代码中的某些内容引起的可能性,我创建了新的实用程序应用程序并确认了减速。iPhone 4 过去比 iPhone 3G 快约 3 倍,现在它比 3G 慢(!!!)。启动时间也变得非常不稳定(+- 0.3s),过去是+-0.05s。在飞行模式下波动消失了,所以我怀疑它是由一些与 iCloud 相关的后台进程引起的。然而,我对升级前后 iPhone 4 的启动时间慢了 3 倍感到非常困惑。

以下是平均启动时间,首先是在 Xcode 中调试(然后没有 Xcode):

             Debug   No-debug
iPhone 3G:   1.23s   (0.67s)  
iPhone 4:    0.43s   (-----)  [iOS 5.0.1, Xcode 4.3]
iPhone 4:    1.53s   (1.18s)  [iOS 5.1, Xcode 4.3.1]

iPad 2:      0.41s   (0.22s)  [iOS 5.1, Xcode 4.3.1]

我不知道这是由 iOS 5.1 或 Xcode 4.3.1 引起的,还是 iPhone 4 特有的问题。有没有人看到类似的放缓?

4

1 回答 1

1

在进一步调查中,我注意到在分析期间(在观看 WWDC 2012 Session 235 “iOS App Performance - Responsiveness”之后),我注意到的时间差异归因于对_UIAccessibilityInitialize.

我一直在测试我的应用程序的可访问性,并启用了Settings > Accessibility > Triple-click Home > Ask。这恰逢 5.1 更新的发布,我错误地将问题归咎于新版本。我猜操作系统必须初始化可访问性机制,以便您可以随时打开VoiceOver,而无需重新启动所有打开的应用程序。

据我所知,启用可访问性对性能的影响没有明确记录。因此,为了节省其他注重性能可访问性的开发人员这个惊喜,请知道即使将三次单击主页设置为询问,您也需要支付_UIAccessibilityInitialize.

我还将设计一个方案来懒惰地执行我的自定义可访问性标签,因为它们也对我的应用程序在正常使用中的响应能力产生了不可忽视的影响。我想毕竟没有免费的午餐;-)

于 2012-07-18T09:51:07.433 回答