2010-01-21 98 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