Sto lavorando a un'applicazione per iPhone che mostra una mappa con sovrapposizioni di più cerchi in determinate posizioni. Sto correndo in gravi problemi di memoria e si blocca quando aggiungo più di 6 cerchi e faccio lo zoom indietro abbastanza da renderli tutti visibili. Quando eseguo lo zoom in modo che siano visibili solo 2 cerchi, tutto è a posto. Quando rimuovo MKOverlays, tutto funziona correttamente.Più MKOverlay su MKMapView portano ad avvertimenti di memoria
Chi riconosce questo comportamento?
Codice che crea le sovrapposizioni. I memorizzare le sovrapposizioni in un NSMutableDictionary per riferimenti futuri (per essere in grado di rimuoverli dalla mappa e ad evitare la doppia sovrapposizioni)
- (void)updateMarkersForZones:(NSArray *)zones {
NSLog(@"MapViewController: Update Markers");
// For each zone, show a marker
for (Zone* zone in zones) {
NSString *keyMarker = [NSString stringWithFormat:@"%d-marker", zone.id];
MKCircle *circle = [overlayCache objectForKey:keyMarker];
if (circle == nil) {
// draw the radius circle for the marker
double radius = MAX(zone.markerRadius * 1.0, 1.0);
circle = [MKCircle circleWithCenterCoordinate:zone.location radius:radius];
[mapView addOverlay:circle];
// store the circle in a cache for future reference
[overlayCache setObject:circle forKey:keyMarker];
}
}
}
codice che rende le viste sovrapposte
#pragma mark -
#pragma mark MKMapViewDelegate
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay{
MKCircleView *circleView = [[[MKCircleView alloc] initWithCircle:overlay] autorelease];
circleView.lineWidth = 1.0;
circleView.strokeColor = [UIColor redColor];
return circleView;
}
codice che rilascia la overlay cache
- (void)dealloc {
[overlayCache release];
[mapView release];
[super dealloc];
}
Curioso quale versione di iOS questo sta accadendo su. Dove vedi il picco di consumo di memoria negli strumenti? – Nick
Sto utilizzando iOS 4.0. La classe MKCircle è stata aggiunta alla 4.0. Ho fatto un po 'di test e sembra che porti a seri problemi su un iPhone 3G. 3GS e il simulatore funzionano bene. Non vedo spuntoni negli strumenti, il che rende difficile indagare su questo .. – rule