2009-09-03 4 views
1

私の質問と同様に、「MKMapViewアノテーションを削除するとリークが発生します。私は、ビューベースのプロジェクトを作成する場合、ビューのNIBにUISearchBarとMKMapViewを追加し、デリゲートを結びつけていることを発見しました(実際にはリークを引き起こすために何もする必要はありません。 MapKitのリンクをクリックしてプロジェクトを起動し、UISearchBarをクリックするだけで1k +のリークが発生します。ビュー内にUISearchBarとMKMapViewの両方がある場合を除き、これは起こりません。コードからビューを作成するときも同じ問題があります。 NIBは異なった振る舞いをするかもしれないと思ったが、そうではない。MKMapViewはリークですか

MKMapViewが漏れていますか、間違っていますか?

コードで問題を複製するには、以下のコードを試してみてください - 私は

 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UISearchBar * tmpSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0,0.0,self.view.frame.size.width,40.0)]; 
    [self.view addSubview:tmpSearchBar]; 
    [self setSearchBar:tmpSearchBar]; 
    [tmpSearchBar release]; 

    MKMapView *tmpMapView=[[MKMapView alloc] initWithFrame:CGRectMake(0.0,0.0,self.view.frame.size.width,self.view.frame.size.height)]; 
    tmpMapView.showsUserLocation=FALSE; 
    [self.view insertSubview:tmpMapView atIndex:0]; 
    [self setMapView:tmpMapView]; 
    [tmpMapView release]; 
} 


- (void)dealloc { 
    [mapView release]; 
    [searchBar release]; 
    [super dealloc]; 
} 
TestMapViewFromCodeViewController.m TestMapViewFromCodeViewController.h

 
#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 

@interface TestMapViewFromCodeViewController : UIViewController { 
    UISearchBar *searchBar; 
    MKMapView *mapView; 

} 

@property (nonatomic, retain) MKMapView *mapView; 
@property (nonatomic, retain) UISearchBar *searchBar; 


@end 

新しい "ビューベースのアプリケーション" プロジェクト

を作成しました

私はubviewsをmapViewとsearchBarで使用すると、おそらくこの問題を再現する必要はありません。唯一の私の携帯電話に...

+1

どのように? あなたの自己回答に基づいて、私はSDKのメモリ管理ガイドをよく読んでください。私がiPhoneを使い始めたとき、私はガベージコレクタを持っていないので、しばらくしていたので、何度も漏れてしまった。 –

+0

コードは不要 - UISearchBarをドロップしてから、MKMapViewをIBのビューにドロップするだけです。それを複製するために必要なことはすべてそれです。しかし、私はMacの前でコードバージョンを調べます。上記の – Andiih

+0

コード。私はまた、このリークが私のデバイスでのみ発生することに気づいた(シミュレータではない)。私はまだiPhone OSのバージョンを3.0.1上に更新していない。 – Andiih

答えて

2

はい -

前、ここで公開にこのコードをテストするには、私はちょうどこのリークがシミュレータで発生していないことに気付きました。

3.0のMKMapViewsには既知のリークがあります。リークは、MKMapViewの割り当てを解除するときに発生します。これは、それ以降のリリースで修正されています。この問題を回避するには、1つのMKMapViewを用意して再利用します。何その価値については

https://devforums.apple.com/message/129740#129740