Приложения медленнее запускаются на iPhone 4, iOS 5.1 скомпилирована с Xcode 4.3.1? - PullRequest
2 голосов
/ 20 марта 2012

Я внимательно слежу за временем запуска моего приложения в разработке. В 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 раньше был в 3 раза быстрее, чем iPhone 3G, теперь он запускается медленнее (!!!), чем 3G. Время запуска также стало очень изменчивым (+ - 0,3 с), где оно было + -0,05 с. Волатильность исчезает в режиме полета, поэтому я подозреваю, что это вызвано некоторым фоновым процессом, связанным с iCloud. Однако я очень озадачен 3-кратным замедлением запуска iPhone 4 до и после обновления.

Вот среднее время запуска, сначала во время отладки в 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. Кто-нибудь видит подобное замедление?

1 Ответ

1 голос
/ 18 июля 2012

При дальнейшем расследовании я заметил во время профилирования (после просмотра сеанса 235 WWDC 2012 «Производительность приложения iOS - Отзывчивость»), что разница во времени, которую я заметил, связана с вызовом _UIAccessibilityInitialize.

Я проверял доступность своего приложения и включил Настройки > Доступность > Тройной щелчок Домой > Ask . Это совпало с выпуском обновления 5.1, и я ошибочно приписал проблему новой версии. Я предполагаю, что ОС должна инициализировать механизм специальных возможностей, чтобы вы могли включить VoiceOver в любое время, без необходимости перезапуска всех открытых приложений.

Насколько я знаю, влияние доступности на производительность четко не задокументировано. Таким образом, чтобы удивить других производительность и доступность сознательных разработчиков, знайте, что даже если для Tripple-click Home установлено значение Ask, вы платите _UIAccessibilityInitialize.

Я также собираюсь разработать схему, с помощью которой мои ленивые метки accessibilityLabels будут лениво, так как они также оказывают существенное влияние на отзывчивость моего приложения при нормальном использовании. Я думаю, что в конце концов нет бесплатного обеда; -)

...