VC1がVC2をナビゲーションスタックにプッシュするナビゲーションコントローラがあります。 VC2には、ユーザーの場所がオンになっているタブベースのビューにMKMapViewがあります。ヒープショット分析ツールを使用して計測器を使用して繰り返し割り当てをチェックすると、VC1に戻ったときに割り当て解除されないMKUserLocationオブジェクトが繰り返し見つけられます。 MKMapViewは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でテストしましたが、どちらの場合もこのヒープの成長が見られます。
実際にVC2のdeallocが呼び出されていますか? – Anna
はい、他のすべてのオブジェクトの割り当てが解除されます。私は別のオブジェクトのためにdeallocを取り出してチェックし、ヒープショットに現れ始めました。 –
VC2 deallocメソッドとVC2を作成してプッシュするVC1にコードを投稿できますか?ユーザーの場所をオフにしてVC2のviewWillDisappearでマップのデリゲートをnilに設定しようとしましたか? – Anna