Итак, теперь я преобразовал свой проект в Swift 4 в Xcode 9 и начал тестировать свое приложение. Это большое приложение с четырьмя отдельными вкладками, и почти все работает так, как ожидалось. Одна из вкладок - это карта, использующая GoogleMaps. Я никогда не испытывал никаких проблем с этим, но когда он был построен с Xcode 9 и показан в Simulator, он использует поверх 100% CPU при перемещении карты, и он очень сильно отстает. Вот отладочный навигатор при работе на симуляторе. Мы делаем какой-то пользовательский рисунок, но не на 102% стоимости рисунка.
Это только началось, когда я обновился до Xcode 9 и Swift 4. Когда вы отлаживаете Xcode 9 на iPhone 7, 8 или X симулятор, все с iOS 11, он имеет чуть более 100% процессор, и полностью отключает пользовательский интерфейс примерно на одну секунду каждый раз, когда я попробуйте переместить его. Я начинаю жест перетаскивания, но пользовательский интерфейс обновляется только один раз в секунду. Эффективно давая мне о 1fps.
Однако при отладке в Xcode 9 на симуляторе iPhone с iOS 9 он достигает ~ 90% при перемещении карты и не отставать почти так же. Я предполагаю, что я получаю около 20-30 fps здесь. (Это могут быть те же самые fps, которые я получаю в симуляторах на Xcode 8. Карта никогда не была действительно гладкой на симуляторе.)
При работе на реальном устройстве (iPhone 7, iOS 11), процессор использует около 40% при постоянном перемещении карты и работает очень плавно, без каких-либо задержек (60 кадров в секунду).
Я также получаю это на выходе, как только открываю вкладку с картой, но я думаю, что это не имеет отношения к этому конкретному вопросу:
Main Thread Checker: UI API called on a background thread: -[UIApplication applicationState]
PID: *****, TID: *******, Thread name: com.google.Maps.LabelingBehavior, Queue name: com.apple.root.default-qos.overcommit, QoS: 21
Это говорит о том, что GoogleMapsAPI вызывает [UIApplication applicationState]
в фоновом потоке.
Я использую последнюю версию GoogleMaps: 2.4.0. Насколько мне известно, эта версия может не поддерживать Xcode 9/Swift 4 и т.д., Но я ничего не могу найти о новой версии.