2012-01-05 20 views
4

VC1がVC2をナビゲーションスタックにプッシュするナビゲーションコントローラがあります。 VC2には、ユーザーの場所がオンになっているタブベースのビューにMKMapViewがあります。ヒープショット分析ツールを使用して計測器を使用して繰り返し割り当てをチェックすると、VC1に戻ったときに割り当て解除されないMKUserLocationオブジェクトが繰り返し見つけられます。 enter image description hereMKMapViewはMKUserLocationのメモリを解放していません

すべての注釈を削除しました。また、deallocでユーザーの場所を無効にしました。このヒープの成長の理由は何でしょうか?ナビゲーションスタックにVC2をプッシュ

VC1コード:

- (NSIndexPath *)tableView:(UITableView *)tableView 
    willSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    VC2 *vc2 = [[VC2 alloc] init]; 
    vc2.index = indexPath.row; 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [[self navigationController] pushViewController:vc2 
              animated:YES]; 
    [vc2 release]; 
    vc2 = nil; 
    return nil; 
} 

VC2でのdeallocコード:

- (void)dealloc { 
//Other UILabel, UITextField objects dealloc methods go here 
//The next four lines of code do not make a difference even if they are in viewWillDisappear 
[self.mapView removeAnnotations:self.mapView.annotations]; 
[self.mapView.layer removeAllAnimations]; 
self.mapView.showsUserLocation = NO;//This line does not make a difference in heapshot 
mapView.delegate = nil; 
[mapView release]; 
mapView = nil; 
[super dealloc]; 

}

私が行う場合も、何のヒープの成長は、ありませんユーザーの場所をオンにしないでください。

更新:私はこれをシミュレータとiPad 3G + WiFiでテストしましたが、どちらの場合もこのヒープの成長が見られます。

+0

実際にVC2のdeallocが呼び出されていますか? – Anna

+0

はい、他のすべてのオブジェクトの割り当てが解除されます。私は別のオブジェクトのためにdeallocを取り出してチェックし、ヒープショットに現れ始めました。 –

+0

VC2 deallocメソッドとVC2を作成してプッシュするVC1にコードを投稿できますか?ユーザーの場所をオフにしてVC2のviewWillDisappearでマップのデリゲートをnilに設定しようとしましたか? – Anna

答えて

5

MKMapViewをIBで作成する場合は、/ nil-viewDidUnloadに、-deallocに設定する必要があります。

ビューコントローラの有効期間中にビューがアンロード/リロードされた場合、保持されたプロパティとして設定されているすべてのビュー要素はリロード時にリークされます。

Web/SOには、これが5.0.1より前のAPIバグだったとのうわさが多かったようです。何のバージョンのSDKをビルドしていますか?また

、暗闇の中でショット:代わりにあなたが今使っているこれらのコマンドのための唯一の

self.mapView.showsUserLocation = NO; 

または

self.mapView.showsUserLocation = NO; 
[self.mapView.layer removeAllAnimations]; 
[self.mapView removeAnnotations:self.mapView.annotations]; 

を試してみてください。

MKUserLocationの注釈を削除して、MKMapViewが正しく破棄される可能性がありますか。

+0

私はviewDidUnloadとdeallocでそれを解放しようとしましたが、私はまだ同じ問題があります。 –

+0

私は両方のアプローチを試みましたが、どちらも複数の割り当て問題を変更しません。私は最新のSDK 5.0.1を使用しています。そのため、私がテストしたデバイスもそうです。 –

関連する問題