2012-05-29 3 views
0

Мне нужно было недавно проверить мое приложение с помощью распределений из-за предупреждений о памяти. Даже утечек нет, куча продолжает расти с добавлением аннотаций к карте. Каждый раз, когда я увеличить или уменьшить масштаб, старые аннотаций удаляются, новые создаются и добавляются к карте:Проблема с утечкой памяти MKAnnotationView

enter image description here

Все ячейки памяти из группы NumberedAnnotationView показать отмеченные линии, как проблематично viewForAnnotation

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{ 
    static NSString *reuseId_big = @"bigcircle";  
    NumberedCircleAnnotationView * nca = nil; 
    //nca = (NumberedCircleAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:reuseId_big]; 
    if (nca == nil) 
     nca = [[[NumberedCircleAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId_big imageType:1] autorelease]; // THIS line 
     nca.delegate = self; 
    } 
    return nca; 
} 

инициализация выглядит следующим образом:

-(id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier imageType:(int)imageType { 

    self = [super initWithAnnotation: annotation reuseIdentifier: reuseIdentifier]; // THIS line 
    if (self != nil) 
    { 
    // set stuff 
    } 
    return self; 
} 

Даже после минут, этот autorele все еще есть объекты. (17 и 24 - количество аннотаций, отображаемых на карте и удаленных с [mapView removeAnnotations:[mapView annotations]]; каждый раз, когда я увеличиваю/уменьшаю.

Остальные, я думаю, некоторые сгенерированные MapKit вещи. Я испытываю это в симуляторе с версиями 5,0 и 5,1.

Как я могу это исправить? это то, что я не хватает? Или это нормальное поведение MapKit?

Спасибо!

ответ

0

есть ли какой-либо причине вы не используете

[mapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier]; 

способ?

Кажется, что вы каждый раз создаете представление для своих аннотаций!

Проверить эту статью: http://www.highoncoding.com/Articles/804_Introduction_to_MapKit_Framework_for_iPhone_Development.aspx

+0

Я хотел быть уверен, что я не использую любые изображения и другие вещи, которые могут привести к «кэширование», так что я заметил это, временно. – Templar

+0

Omfg, я не могу поверить, но с 'dequeueReusableAnnotationViewWithIdentifier' работает отлично, нет более откровенных аннотаций. Я знаю, что «MKAnnotationViews» предназначены для повторного использования, но я не думаю, что это вызывает такие проблемы с памятью, если я этого не сделаю ... Спасибо вам большое! – Templar

+0

Я рад, что смог помочь! Наслаждайтесь программированием iOS :) – azamsharp