0

MapView を含む ViewControllerを含むプロジェクトに取り組んでいます。

現在、このページは数回読み込まれ、閉じられています。

私が最初に実装したのは、xib に MapView を追加し、このページが読み込まれるたびに、ライブ バイトが 10 MB ずつ増加していたことです。

ソリューション1

次に、この問題の調査を行った後、MKMapView に単一のオブジェクトを使用し、それをAppDelegateで定義して、常に使用することがわかりました。

これを試してみたところ、メモリ使用量がある程度減少しましたが、しばらくすると、Received Memory Warningが原因でアプリがクラッシュしました。

クラッシュ後にアプリを再度起動すると、MapView ページを初めて開いたときにクラッシュしていました。この時点でのライブバイトは約 11 MB のみでした。

これは AppDelegate に mapview を追加するコードです

 mapView=[[MKMapView alloc]initWithFrame:CGRectMake(0, 0, 300, 450)]; 

[self.window addSubview:mapView]; 

mapView.delegate=self; 

mapView.hidden=YES;

これは、Mapview をロードするために使用したコードです。

- (void)viewDidLoad
{
    [super viewDidLoad];

    latittude=[[[NSUserDefaults standardUserDefaults]valueForKey:@"LATITUDE"] floatValue];
    longitude=[[[NSUserDefaults standardUserDefaults] valueForKey:@"LONGITUDE"] floatValue];

    APPDELEGATE.mapView.frame=CGRectMake(0, 140, 320, 290);

}

-(void)viewDidAppear:(BOOL)animated
{
    APPDELEGATE.mapView.hidden=NO;

    CLLocationCoordinate2D location;
    location.latitude  = latittude;
    location.longitude = longitude;

    Annotation *a;
    a=[[Annotation alloc]initWithCoordinate:location];
    [APPDELEGATE.mapView addAnnotation:a ];
}

-(void)viewWillDisappear:(BOOL)animated
{
    APPDELEGATE.mapView.hidden=YES;
}   

ソリューション2

私が見つけた2番目の解決策は、ビューが消えたときにMapViewタイプを変更することでした。

そのため、型を変更し、デリゲートを nil に変更し、ViewWillDisappear のスーパービューから削除しました。

これでも違いはありませんでした。

どうすればこの問題を克服できますか?

ありがとう

4

1 に答える 1

0

アプリのデリゲートに MapView を格納することは、少し奇妙な解決策のように思えます。あなたが最初に行ったように、それを単一のコントローラーに含めることに戻ります。

私が最初に実装したのは、xib に MapView を追加し、このページが読み込まれるたびに、ライブ バイトが 10 MB ずつ増加していたことです。

これはあなたの問題であり、メモリ リークのようです。オブジェクト/メモリを正しく処理している場合、アプリのサイズは大きくなりません。arc を使用していることを確認し、viewWillDisappear メソッドで必要なオブジェクト (NSTimers、NSNotifications など) を nil に設定していることを確認してください。

于 2013-10-10T11:02:11.983 に答える