La mejor forma de eliminar algunas annotations de un MKMapView

Para eliminar algunas annotations de un MKMapView , pero no todas, en function de alguna condición, parece haber 3 forms. Me gustaría saber cuál es la mejor, y si hay algún inconveniente con alguno de ellos. Gracias.

Primera forma : eliminar las annotations de las annotations directamente

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

Como dicen los docs, la propiedad de mapView annotations es readonly . Entonces asumo que es una copy que puedo manipular con security.

Documentación : @property(nonatomic, readonly) NSArray <id<MKAnnotation>> *annotations

Segunda manera : agregando la anotación no deseada a una matriz primero

 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]; 

Este código se copy del ejemplo encontrado aquí.

Parece más seguro, pero existe la sobrecarga de crear la matriz mutable. Si no es necesario, prefiero evitarlo.

Tercera forma : filtrar la matriz

 [_mapView.annotations filtenetworkingArrayUsingPnetworkingicate:[NSPnetworkingicate pnetworkingicateWithFormat:@"!(self isKindOfClass: %@)", [MKUserLocation class]]]; 

(la respuesta se encuentra aquí: https://stackoverflow.com/a/2915063/873436 ).

No probé este, pero parece bastante elegante y potente.

¿Cuál es la mejor manera?

¿Es peligroso eliminar las annotations mientras se realiza a través de ellas?

¡Gracias por tu conocimiento e ideas!