ios – 如何停止GMSMapView渲染器?

ios – 如何停止GMSMapView渲染器?,第1张

概述在使用GMSMapView作为视图层次结构的一部分时,我注意到了性能问题.重要说明:地图不占用整个屏幕,它用作表格视图标题.这些问题会影响表视图本身的行为 – 低FPS,这会导致糟糕的用户体验,所以我试图解决这些问题或者至少了解GMSMapView正在做什么. 使用Time Profiler我发现这是由每个帧上的GMSMapView重新渲染(我可以告诉),因为主线程上最重的堆栈跟踪是: 这是从: 在使用GMSMapVIEw作为视图层次结构的一部分时,我注意到了性能问题.重要说明:地图不占用整个屏幕,它用作表格视图标题.这些问题会影响表视图本身的行为 – 低FPS,这会导致糟糕的用户体验,所以我试图解决这些问题或者至少了解GMSMapVIEw正在做什么.

使用Time Profiler我发现这是由每个帧上的GMSMapVIEw重新渲染(我可以告诉),因为主线程上最重的堆栈跟踪是:

这是从:
CFRUNLOOP_IS_CALliNG_OUT_TO_A_SOURCE1_PERFORM_FUNCTION

(我想这就是谷歌地图的内部工作原理 – 它使用runloop注册CAdisplaylink并在每个帧上重新渲染它)

这会导致cpu使用率过高(高达99%):

请注意,在所选区域上,应用程序没有发生任何实际情况,它只显示静态地图和表格视图(没有用户交互,没有框架更改,没有任何内容)

如果我在没有GMSMapVIEw作为子视图的情况下进行相同的测试,那么同一地方的cpu使用率几乎为0%:

现在回答这个问题.为什么会发生这种情况以及如何阻止这种行为?

我在GMSMapVIEw上找到了一个名为 – (voID)stopRendering的方法,并对其进行了测试 – 结果很好,我获得了与完全删除地图视图时相同的性能.但是,此方法被标记为已弃用,并声明它将在SDK的未来版本中删除,这使其成为长期解决方案的不良候选者.

任何帮助,解释或线索将不胜感激!

解决方法 stopRendering的问题在于它将管理地图状态的负担放在开发人员身上.

您应该限制对象的帧速率,而不是使用stopRendering. GMSMapVIEw有一个名为preferredFrameRate的属性.您应该使用它.它在文档中说默认的preferredFrameRate设置为最大值,或者重新渲染每一帧.

preferredFrameRate是一个名为GMSFrameRate的枚举.它具有以下值:

> kGMSFrameRatePowerSave
> kGMSFrameRateConservative
> kGMSFrameRateMaximum

您应该使用#2来确保地图在用户交互期间保持流畅,但也不会不必要地渲染.默认情况下,preferredFrameRate设置为#3.

总结

以上是内存溢出为你收集整理的ios – 如何停止GMSMapView渲染器?全部内容,希望文章能够帮你解决ios – 如何停止GMSMapView渲染器?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1033421.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存