MKAnnotationView内存泄漏问题

时间:2012-05-29 17:53:16

标签: iphone memory-management mapkit mkannotationview

由于内存警告,我最近需要使用Allocations测试我的应用。即使没有泄漏,堆也会随着添加到地图中的注释而不断增长。每次放大或缩小时,旧的注释都会被删除,新的注释会被创建并添加到地图中:

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;
}

init看起来像这样:

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

即使在几分钟后,这些自动释放的物体仍然存在。 (17和24是地图上显示的注释数量,每次放大/缩小时都会以[mapView removeAnnotations:[mapView annotations]];删除。

其他人,我认为,是一些MapKit生成的东西。我在版本5.0和5.1的模拟器中遇到了这个问题。

我该如何解决这个问题?是我缺少的东西吗?或者这是Mapkit的正常行为?

谢谢!

1 个答案:

答案 0 :(得分:0)

你有没有理由不使用

[mapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];

方法?

好像你每次都在为注释创建视图!

查看这篇文章: http://www.highoncoding.com/Articles/804_Introduction_to_MapKit_Framework_for_iPhone_Development.aspx