0

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

在此处输入图像描述

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

初始化看起来像这样:

-(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 的正常行为吗?

谢谢!

4

1 回答 1

1

你有什么理由不使用

[mapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];

方法?

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

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

于 2012-05-29T18:18:36.300 回答