2010-01-21 198 views
3

我正在使用MKMapView並顯示用戶位置的iPhone應用程序。我得到內存泄漏泄漏的對象是NSCFArray大小爲128字節,GeneralBlock-16,GenralBlock-8當MKMapView的showUserLocation屬性爲TRUE。如果被設置爲NO,那麼我不會得到這個泄漏。任何人都可以建議,這可能是什麼原因。這是一個在MKMapView類中的錯誤,或者我是否正確使用MKMapView。有人能告訴我什麼是最好的方式來使用MKMapView和顯示userLocation也。MKMapView內存泄漏iPhone應用程序

感謝&問候, 普里AGGARWAL

回答

2

我有相同的問題。它看起來像MKMapView中的一個bug。想到三種解決方法:

  1. 爲當前位置創建您自己的註釋。
  2. 不要破壞並重新創建視圖,所以你只能泄漏一次。
  3. 將其關閉。

幸運的是我,我可以關掉它沒有功能的任何顯著損失。

0

我通過autoreleasing我的annotationView對象修復了一個類似的問題。此外,MKUserLocation是一個註釋對象,因此檢查您自己的註釋對象(或檢查註釋對象是否爲MKUserLocation),並返回其他註釋對象(或MKUserLocation)的nil將告訴地圖工具包使用默認的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