向地图添加批注太慢-iOS

向地图添加批注太慢-iOS,ios,performance,ipad,annotations,maps,Ios,Performance,Ipad,Annotations,Maps,在iOS中向地图添加注释(使用标准mapkit方法,因此使用Apple maps)时,我遇到了一个性能问题。我试图使用(void)addAnnotations:(NSArray*)annotations方法批量添加大量注释(10000+)。annotation对象没有什么特别之处—这是一个非常基本的类,它实现了MKAnnotation,只有构造函数定义如下: - (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordina

在iOS中向地图添加注释(使用标准mapkit方法,因此使用Apple maps)时,我遇到了一个性能问题。我试图使用
(void)addAnnotations:(NSArray*)annotations
方法批量添加大量注释(10000+)。annotation对象没有什么特别之处—这是一个非常基本的类,它实现了
MKAnnotation
,只有构造函数定义如下:

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

    return self;
}
为了进行测试,我创建了一个基本应用程序,只需在加载时将注释添加到基本地图视图中,在iPad2上大约需要6-7秒。性能非常好。然而,当我在自己的应用程序中嵌入相同的基本地图视图时,事情变得复杂起来。这是完全相同的逻辑,但当我在我的应用程序中这样做时,加载所有注释大约需要50秒

我的应用程序彼此之间有很多视图。为了找出问题所在,我从最底层开始嵌入地图视图,直到到达顶层。我在每个步骤中都做了分析,看看它是否有助于提高性能,但我没有看到任何结果——仍然需要大约50秒。现在,我的应用程序基本上只是加载注释并将其添加到顶级和唯一级别的地图视图中,理想情况下与独立应用程序相同,但无论出于何种原因,我仍然看到注释渲染需要大约50秒。我唯一合理的解释是关于我的一些应用程序设置,它们在某种程度上干扰了地图的性能。我读了很多书,想找出一个解决办法,但都没有用

有人知道这里可能有什么问题吗?谢谢

没有实际的“问题”。我的意思是,您有10000多个分配、绘制和渲染,它们实际上对应用程序的性能有影响

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

当用户移动时,您只需加载新rect中的注释减去先前rect中已加载的注释即可。我想你也可以在注释离开屏幕时删除它们

这有点像苹果在处理滚动视图时所建议的。我记得在这个应用程序中,用户必须加载scrollview的上一节和下一节的内容(并释放上一节和下一节的内容),这样才能降低内存消耗并保持良好的用户体验


试着想想用户在看什么,试着只显示与该部分相关的注释(或MKMapView行话中所称的区域),我认为您的应用程序响应能力会立即得到提高

很好的问题和深度/细节。不幸的是,我不知道答案,但对于StackOverflow的第一个问题,我必须为你鼓掌!我没有玩过很多MapKit,但这里有两个可能的选择:1)尝试在bg线程中使用它(不确定它是否有效)。2) 仅加载在定义的缩放中有意义的注释。因此,如果你非常缩小,你只能显示一个,可能是20个,一旦你缩小,可能的注释数量将少于10k,所以显示下一个20个更重要的,与你当前视口相交的注释。。。等等