1

MKMapView私の質問「注釈を削除するとリークが発生します」と同様に。ビューベースのプロジェクトを作成し、ビューのNIBにとを追加し、デリゲートを接続する場合(リークをトリガーするために実際に何もする必要がないため、メソッドを作成していません)、リンクインすることを発見しUISearchBarましMKMapViewた。 MapKitを使用してプロジェクトを起動し、クリックするだけでUISearchBar1k以上のリークが発生します。UISearchBarMKMapViewビューの両方がない限り、これは発生しません。コードからビューを作成するときにも同じ問題が発生します。NIBの動作が異なる可能性があると思いましたが、そうではありません。

MKMapView漏れているか、何か間違ったことをしていますか。

コードで問題を再現するには、以下のコードを試してください-新しい「ビューベースのアプリケーション」プロジェクトを作成しました

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

TestMapViewFromCodeViewController.m

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

mapViewとsearchBarでサブビューを保持しましたが、問題を再現するためにこれはおそらく不要です。

ここで公開する前にこのコードをテストしたところ、このリークはシミュレーターでは発生せず、電話でのみ発生することに気づきました...

4

2 に答える 2

2

はい。

3.0のMKMapViewsには既知のリークがあります。MKMapViewの割り当てを解除すると、リークが発生します。これは、以降のリリースで修正されています。回避策は、単一のMKMapViewを用意して再利用することです。

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

于 2009-11-04T07:28:15.303 に答える
0

その価値については、ここに同様の関連する質問があります。

于 2011-07-22T09:44:47.937 に答える