要根据某些条件从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)。
我没试过这个,但它看起来相当优雅和强大。
最好的方法是什么?
在通过它们时删除注释是否危险?
感谢您的知识和见解!