因此,我现在已将我的项目转换为在 Xcode 9 中使用 Swift 4,并开始测试我的应用程序。这是一个大型应用程序,有四个不同的选项卡,几乎所有内容都按预期运行。其中一个选项卡是地图,使用 GoogleMaps。我从来没有遇到过任何问题,但是当使用 Xcode 9 构建并在模拟器中显示时,它使用over移动地图时CPU占用100%,而且非常卡顿。
这是在模拟器上运行时的调试导航器。
我们做了一些定制绘图,但不是 102% 的绘图。
在我更新到 Xcode 9 和 Swift 4 后,这种情况才开始发生。
在 iPhone 7、8 或 X 上的 Xcode 9 中调试时模拟器,全部使用 iOS 11,它的 CPU 利用率刚刚超过 100%,并且每次我尝试移动它时,它都会完全阻止 UI 更新大约一秒钟。我开始拖动手势,但 UI 每秒只更新一次。有效地给我关于1fps.
However,在 iPhone 6 上的 Xcode 9 中调试时模拟器 with iOS 9,当移动地图时,它会达到约 90%,并且几乎不会滞后那么多。我猜我这里的帧率大约是 20-30 fps。 (这可能与我在 Xcode 8 上的模拟器中获得的帧数相同。地图在模拟器上从来都不是很流畅..)
在实际设备(iPhone 7、iOS 11)上运行时,不断移动地图时 CPU 使用率约为 40%,并且工作非常流畅,完全没有延迟(60fps)。
当我打开带有地图的选项卡时,我也会在输出中得到这个,但我认为这与这个特定问题无关:
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]
在后台线程..
我正在使用最新版本的谷歌地图:2.4.0。据我所知,这个版本可能不支持 Xcode 9/Swift 4 等,但我找不到任何有关新版本的信息。