2 Stimmen

iphone warum verwendet er valueForKeyPath

Ich habe im Internet einen Mapkit-Code gefunden, der wie folgt aussieht:

- (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

Ich möchte wissen, warum valueForKeypath verwendet wird, um die Koordinatendaten zu erhalten, anstatt nur

[self.mapView.annotations]

Hat es etwas mit der Geschwindigkeit zu tun?

4voto

Ashley Clark Punkte 8783

Er benutzt die valueForKeyPath: Konstrukt, um ein Array mit allen Koordinaten für alle Anmerkungen zurückzugeben.

Unter der Annahme, dass self.mapView est un MKMapView dann hat es eine annotations Eigenschaft, die ein Array von Objekten zurückgibt, die der MKAnnotation Protokoll. Das bedeutet, dass jedes Objekt in diesem Array das Protokoll coordinate Eigentum. Durch einen Aufruf von [self.mapView valueForKeyPath:@"annotations.coordinate"] erhält er sofort ein Array mit allen Koordinaten, ohne jedes einzelne Anmerkungselement im Array durchlaufen zu müssen.

Ohne das KVC-Konstrukt hier zu verwenden, müsste er etwas Ähnliches wie das hier tun:

NSMutableArray *coordinates = [NSMutableArray array];
for (id<MKAnnotation> annotation in self.mapView.annotations)
    [coordinates addObject:annotation.coordinate];

Alles in allem wird der Code dadurch einfacher und leichter zu lesen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X