iOS16.1 Mapkit [VKDefault] 超出金属缓冲区阈值 50000

t.i*_*ios 3 mapkit ios swift metal ios16

因此对于我们的地图,我们使用 MapKit。我们使用 MKPolygons 在地图上方叠加一个图层。此功能自 iOS15 起一直有效,但自 16.1 起,我们收到以下错误,并且应用程序冻结(不会崩溃)。

  • [VKDefault] Exceeded Metal Buffer threshold of 50000 with a count of 50892 resources, pruning resources now (Time since last prune:6.497636): Assertion with expression - false : Failed in file - /Library/Caches/com.apple.xbs/Sources/VectorKit/src/MDMapEngine.mm line - 1363

  • Metal API Validation Enabled [PipelineLibrary] Mapping the pipeline data cache failed, errno 22

另一个有趣的日志如下

  • [IconManager] No config pack found for key SPR London Landmarks

知道如何手动清除金属缓存吗?

CJi*_*iOS 5

似乎存在与进行绘制调用的 MKOverlayRenderer 数量相关的问题。拥有多个似乎会引发此问题。使用 MKMultiPolyline/Polygon 似乎是一种解决方法,但如果您需要支持 iOS 12 或独立设置线条和多边形的样式,则该方法不起作用。

  • 对我来说,使用 MKMultiPolyline 渲染器似乎已经解决了这个问题。谢谢你! (2认同)
  • @mylogon我认为现在的解决方案是仅使用MKMultiPolygonRender和MKMultiPolylineRender,即将尽可能多的多边形和折线一起批处理。在我的测试中,当仅达到 100 个渲染器时,我会遇到崩溃。 (2认同)
  • @derickito 谢谢。这看起来也是 Apple DTS 支持人员给我的官方建议。显然,iOS 16 Mapkit 获得了很多额外的细节和功能(开销),因此与之前的版本相比,这个渲染器性能问题更有可能在 iOS 16 上出现。 (2认同)