从MKMapView中删除一些注释的最佳方法

时间:2016-07-20 19:06:45

标签: ios objective-c mkmapview mkannotation mkannotationview

要根据某些条件从MKMapView中删除某些注释,但不是所有注释,似乎有3种方法。我想知道哪一个是最好的,如果有任何陷阱。谢谢。

第一种方式:直接从注释中删除注释

for (id<MKAnnotation> annotation in self.mapView.annotations) {
    if ([annotation isKindOfClass:[PinAnnotation class]]) {
        [self.mapView removeAnnotation:annotation];
    }
}

正如文档所说,mapView annotations属性为readonly。所以我认为这是一个我可以安全操作的副本。

Documentation@property(nonatomic, readonly) NSArray <id<MKAnnotation>> *annotations

第二种方式:首先将不需要的注释添加到数组

NSInteger toRemoveCount = myMap.annotations.count;
NSMutableArray *toRemove = [NSMutableArray arrayWithCapacity:toRemoveCount];
for (id annotation in myMap.annotations){
    if (annotation != myMap.userLocation){
        [toRemove addObject:annotation];
    }
}
[myMap removeAnnotations:toRemove];

此代码是从找到的here

示例中复制而来的

看起来更安全,但是创建可变数组的开销很大。如果没有必要,我宁愿避免它。

第三种方式:过滤数组

[_mapView.annotations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"!(self isKindOfClass: %@)", [MKUserLocation class]]];

(答案在这里找到:https://stackoverflow.com/a/2915063/873436)。

我没试过这个,但它看起来相当优雅和强大。

最好的方法是什么?

在通过它们时删除注释是否危险?

感谢您的知识和见解!

0 个答案:

没有答案