2010-01-21 2 views
3

Я работаю над приложением iPhone, которое использует MKMapView и показывает пользовательскую локацию. Я получаю утечки памяти, где просочившийся объект - это NSCFArray размером 128 байтов, GeneralBlock-16, GenralBlock-8, когда установлено свойство showUserLocation MKMapView как ИСТИНА. Если установлено как НЕТ, я не получаю эту утечку. Может ли кто-нибудь предположить, что может быть возможной причиной этого. Является ли это ошибкой в ​​классе MKMapView или я неправильно использую MKMapView. Может кто-нибудь сказать мне, что является лучшим способом использовать MKMapView и показать userLocation.Утечка памяти MKMapView в приложении для iPhone

Благодарности & С уважением, Приянка Aggarwal

ответ

2

У меня точно такой же вопрос. Похоже на ошибку в MKMapView для меня. Приходят на ум три метода:

  1. Создайте собственную аннотацию для текущей позиции.
  2. Не разрушайте и не воссоздавайте представление, поэтому вы получаете только утечку.
  3. Отключите его.

К счастью для меня, я могу отключить его без какой-либо значительной потери функции.

0

Я исправил аналогичную проблему, выполнив автореализацию объектов annotationView. Кроме того, MKUserLocation является объектом аннотации, поэтому проверка ваших собственных объектов аннотаций (или проверка на то, является ли объект аннотации MKUserLocation), а возвращаемый нуль для других объектов аннотации (или MKUserLocation) подскажет набору карт, чтобы использовать объект MKUserLocation по умолчанию. Включение этих проверок может остановить вашу утечку. Смотрите ниже:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ static NSString *placemarkIdentifier = @"placemark_identifier"; 
    if ([annotation isKindOfClass:[MyPlaceMark class]]) { 
     MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:placemarkIdentifier]; 
     if (annotationView == nil) { 
      annotationView = [[[MyPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:placemarkIdentifier] autorelease]; 
     } else { 
      annotationView.annotation = annotation; 
     } 
     return annotationView; 
    } 
    return nil; 
} 

MKUserLocation class reference

Смежные вопросы