Несколько MKOverlays на MKMapView приводят к предупреждениям памяти

Я работаю над приложением для iPhone, которое показывает карту с несколькими круговыми оверлейными программами на определенных местоположениях. Я сталкиваюсь с серьезными проблемами памяти и катастрофическими отказами, когда я добавляю больше чем 6 кругов, и я уменьшаю масштаб достаточно далеко, что они все видимы. Когда я увеличиваю масштаб таким образом, что только 2 круга видимы, все в порядке. Когда я удаляю MKOverlays, все хорошо работает.

Кто-либо, кто распознает это поведение?

Код, который создает оверлейные программы. Я храню оверлейные программы в NSMutableDictionary для дальнейшего использования (чтобы смочь удалить их из карты и предотвратить двойные оверлейные программы)

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

Код, который делает представления наложения

#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;
}

Код, который выпускает кэш наложения

- (void)dealloc {
    [overlayCache release];
    [mapView release];
    [super dealloc];
}
6
задан rule 30 July 2010 в 09:44
поделиться