向地图添加注释太慢 - iOS

use*_*441 5 performance maps annotations ipad ios

我有一个关于在iOS中向地图添加注释的性能问题(使用标准的mapkit方法 - 因此使用Apple地图).我正在尝试使用该(void)addAnnotations:(NSArray *)annotations方法批量添加大量注释(10000+).注释对象没有什么特别之处 - 一个非常基本的类,MKAnnotation只使用如下定义的构造函数来实现:

- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d {
    if(self = [super init]) {
        title = ttl;
        coordinate = c2d;
    }

    return self;
}
Run Code Online (Sandbox Code Playgroud)

为了测试,我创建了一个基本的应用程序,只需在加载时将注释添加到基本地图视图,在iPad上大约需要6-7秒2.非常可接受的性能.但是,当我在自己的应用程序中嵌入相同的基本地图视图时,事情会变得复杂.这是完全相同的逻辑,但是当我在我的应用程序中执行它时,加载所有注释大约需要50秒.

我的应用程序彼此之间有很多视图.为了查明问题,我已经开始从最低级别开始嵌入地图视图,直到我达到顶级.我已经完成了每一步的分析,看它是否有助于性能,但我没有看到任何结果 - 它仍然是大约50秒.现在,我的应用程序基本上只加载并添加注释到顶级和唯一级别的地图视图,理想情况下与独立应用程序相同,但无论出于何种原因,我仍然看到注释渲染大约需要50秒.我唯一合理的解释是我所拥有的一些应用程序设置会以某种方式干扰地图性能.我做了一堆阅读,想出一个无济于事的解决方案.

有人对这里可能出现的问题有任何想法吗?谢谢!

Fab*_*oni 1

不存在实际的“问题”。我的意思是,您有超过 10000 次分配、绘制和渲染,它们实际上对应用程序的性能产生了影响。

我的建议是拦截用户在地图上的导航。使用类似的东西[mapView visibleMapRect]在屏幕上获取地图的可见部分。获取矩形的坐标(可能稍大一些,以便用户在移动地图时无法注意到)并仅加载该矩形内的注释。

当用户移动时,您只需加载新矩形中的注释减去前一个矩形中已加载的注释。我想您也可以在注释离开屏幕时将其删除。

这有点类似于苹果在处理滚动视图时建议的做法。我记得用户必须加载滚动视图的上一个和下一个部分的内容(并释放前一个视图的内容)的应用程序,以便缓慢的内存消耗并仍然保持良好的用户体验。

尝试考虑用户正在查看的内容,尝试仅显示与该部分(或在 MKMapView 行话中称为区域)相关的注释,我认为您的应用程序响应能力将立即提高。