我在互联网上找到了一些看起来像这样的mapkit代码:
- (void)recenterMap {
NSArray *coordinates = [self.mapView valueForKeyPath:@"annotations.coordinate"];
CLLocationCoordinate2D maxCoord = {-90.0f, -180.0f};
CLLocationCoordinate2D minCoord = {90.0f, 180.0f};
for(NSValue *value in coordinates) {
CLLocationCoordinate2D coord = {0.0f, 0.0f};
[value getValue:&coord];
if(coord.longitude > maxCoord.longitude) {
maxCoord.longitude = coord.longitude;
}
--omitted the rest
我想知道为什么valueForKeypath用于获取坐标数据,而不仅仅是
[self.mapView.annotations]
它与速度有关吗?
答案 0 :(得分:4)
他正在使用valueForKeyPath:
构造返回所有注释的所有坐标数组。
假设self.mapView
是MKMapView
,那么它具有annotations
属性,该属性返回符合MKAnnotation
协议的对象数组。这意味着该数组中的每个对象都应实现coordinate
属性。通过发出对[self.mapView valueForKeyPath:@"annotations.coordinate"]
的调用,他立即获得所有坐标的数组,而不必迭代数组中的每个单独的注释项。
在这里不使用KVC构造,他必须做类似的事情:
NSMutableArray *coordinates = [NSMutableArray array];
for (id<MKAnnotation> annotation in self.mapView.annotations)
[coordinates addObject:annotation.coordinate];
总而言之,它只是使代码更简单,更容易阅读。