2010-01-21 8 views
3

Je travaille sur une application iPhone qui utilise MKMapView et affiche la répartition des utilisateurs. Je reçois des fuites de mémoire où l'objet divulgué est NSCFArray de taille 128 Bytes, GeneralBlock-16, GenralBlock-8 quand est définie la propriété showUserLocation de MKMapView comme TRUE. Si est défini comme NON alors je ne reçois pas cette fuite. Quelqu'un peut-il suggérer que ce peut être la raison possible de cela. Est-ce un bogue dans la classe MKMapView ou est-ce que j'utilise incorrectement le MKMapView? Quelqu'un peut-il me dire quelle est la meilleure façon d'utiliser MKMapView et afficher userLocation également.Fuite de mémoire MKMapView dans l'application iPhone

Merci & Cordialement, Priyanka Aggarwal

Répondre

2

J'ai exactement le même problème. Cela ressemble à un bug dans MKMapView pour moi. Trois solutions de contournement viennent à l'esprit:

  1. Créez votre propre annotation pour la position actuelle. Ne pas détruire et recréer la vue de sorte que vous obtenez seulement la fuite une fois.
  2. Désactivez-la.

Heureusement pour moi, je peux l'éteindre sans perte significative de fonctionnalité.

0

J'ai corrigé un problème similaire en autoreleasing mes objets annotationView. MKUserLocation est également un objet d'annotation, vérifiant ainsi vos propres objets d'annotation (ou vérifiant si l'objet d'annotation est MKUserLocation), et renvoyant nil pour les autres objets d'annotation (ou MKUserLocation) indiquera au kit de carte d'utiliser l'objet MKUserLocation par défaut. Mettre ces contrôles en place pourrait arrêter votre fuite. Voir ci-dessous:

- (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