¿MKAnnotationView almacena en búfer su cola de entrada?

Quiero mostrar diferentes pines de color en un UIMapView en función del tiempo relativo que representan
pero parece que el método mapView: viewForAnnotation: solo hace su cosa independientemente de cuándo se llama.

En mi ejemplo de código, ya recuperé ubicaciones anteriores y más recientes de un archivo en self.fileArray. la matriz contiene objetos llamados hallazgos que tienen (entre otros) una propiedad de edad. los hallazgos más nuevos comienzan la vida como edad @ "0", y cada vez que se vuelve a cargar la matriz lista para tomar nuevos hallazgos, progresan en edad a @ "1" y @ "2" respectivamente, luego de lo cual se eliminan.

Una vez que adquieren su propiedad de la nueva era, se envían a mapView: viewForAnnotation: método que se mostrará de acuerdo con su nuevo estado a medida que recorro el archivo FileArray

La pregunta real es después del salto. Surgieron muchas otras respuestas interesantes al formular la pregunta, pero ninguna se aplicó a mi caso

.
.
int size = [self.fileArray count];
for (int idx=(size-1); idx>0; idx--)  // process backwards
    {
        annotationFlag = 0;           // using a global just for now
    self.finding = self.fileArray[idx];
        if ([self.finding.age isEqualToString:@"2"]) {
            [self.fileArray removeObjectAtIndex:idx];
        }

        if ([self.finding.age isEqualToString:@"1"]) {
            self.finding.age = @"2";
            [self.fileArray replaceObjectAtIndex:idx withObject:self.finding];
            annotationFlag = 2;

            // tried here , only displays the newest
        }

        if ([self.finding.age isEqualToString:@"0"]) {
            self.finding.age = @"1";
            [self.fileArray replaceObjectAtIndex:idx withObject:self.finding];
            annotationFlag = 1;

            // tried here, still only displays the same newest 
        }

    }   // end if

//<Breakpoint with Log here> 

    MKPointAnnotation* annotation = [[MKPointAnnotation alloc] init];
    CLLocationCoordinate2D myCoordinate;
    myCoordinate.latitude =[self.finding.myLat doubleValue];
    myCoordinate.longitude=[self.finding.myLong doubleValue];
    annotation.coordinate = myCoordinate;
    [self.mapView addAnnotation:annotation];
}       // end for 
.
.

Los métodos de anotación son bastante estándar, como los usa la mayoría de las personas:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation: (MKUserLocation *)userLocation {
_mapView.centerCoordinate = userLocation.location.coordinate;
}


- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation {

if([annotation isKindOfClass:[MKUserLocation class]])
    return nil;

static NSString *identifier = @"myAnnotation";
MKPinAnnotationView * annotationView = (MKPinAnnotationView*)[ self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (!annotationView)
{
    annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];

//<Breakpoint with Log here>

    switch (annotationFlag) {
        case 1:
        annotationView.pinColor = MKPinAnnotationColorGreen;
            break;
        case 2:
        annotationView.pinColor = MKPinAnnotationColorRed;
            break;
        default:
        annotationView.pinColor = MKPinAnnotationColorPurple;
        break;
    }
    annotationView.animatesDrop = YES;
    annotationView.canShowCallout = NO;
}else {
    annotationView.annotation = annotation;
}
annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeSystem]; // UIButtonTypeDetailDisclosure
return annotationView;
}

También bajo prueba está mi curiosidad perros vecinos. los pines deben mostrar diferentes colores para cada incursión

Si NSLog annotationFlag para consolar en varios puntos mapView: viewForAnnotation: parece ignorar los valores en annotationFlag y solo usa el último estado establecido, lo que me hace creer que solo está actuando cuando el ciclo for está completamente terminado y no sigue las iteraciones.

entonces la pregunta es, ¿por qué la llamada [self.mapView addAnnotation: annotation] no actúa de inmediato? Lo puse dentro del ciclo for, y no hay duplicación sucediendo allí.

EDICIÓN TARDÍA: utilizando una combinación de puntos de interrupción y de inicio de sesión en las consolas como se muestra en los listados anteriores, y comentando el aumento de edad, el procesamiento da como resultado una serie de 42 elementos (incluidos los antiguos listos para ser descartados) y, por lo tanto, 42 pines para ser dejado caer

Cuando se alcanza el método mapView: viewForAnnotation, tengo que pasar por otras 42 veces y el día 43 todos los pines caen a la vez. Observar atentamente es del mismo color para que pueda verificar que el último color utilizado no dibuje sobre los anteriores. Si eso aclara el problema.

Respuestas a la pregunta(1)

Su respuesta a la pregunta