0

最近、メモリの警告が発生したため、Allocationsを使用してアプリをテストする必要がありました。リークがない場合でも、ヒープはマップに注釈が追加されて成長し続けます。ズームインまたはズームアウトするたびに、古い注釈が削除され、新しい注釈が作成されてマップに追加されます。

ここに画像の説明を入力してください

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の通常の動作ですか?

ありがとう!

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 に答える