構築中のアプリケーションの 1 つで深刻なメモリ リークが発生しています。UITabBarview 内に UINavigatonController があります。NavView の内部には MKMap ビューがあります。吹き出しのアクセサリ ボタンをクリックすると、詳細ビューが読み込まれます。その詳細ビューでは、for(object in array) ループを使用して plist からテーブルを作成しようとしています。plist は辞書の配列です。辞書を実行して、コールアウトのタイトルであるキーを持つ辞書を見つけ、その辞書内から配列を取得しています。シミュレーターではすべて正常に動作しますが、私のやり方では大量のメモリリークが発生しています。何が起こっているのですか?
- (void)viewDidLoad {
self.title = @"Route Details";
NSString *path = [[NSBundle mainBundle] pathForResource:@"stopLocation" ofType:@"plist"];
holderArray = [[NSMutableArray alloc] initWithContentsOfFile:path];
[self getRouteArray];
routeDetails.delegate = self;
routeDetails.dataSource = self;
}
-(void)getRouteArray{
for (NSMutableDictionary *dictionary in holderArray) {
//NSString *stopName = [dictionary objectForKey:@"StopName"];
//NSString *stopName = [[NSString alloc] initWithString:[dictionary objectForKey:@"StopName"]];
BOOL testString = [currentRoute isEqualToString:[dictionary objectForKey:@"StopName"]];
if (testString) {
routeArray = [[NSMutableArray alloc] initWithArray:[dictionary objectForKey:@"RouteService"]];
}
}
}
- (void)dealloc {
[routeArray release];
[routeDetails release];
[super dealloc];
}
holderArray は ivar であり、ルート配列もそうです。ご覧のとおり、nstring と配列を割り当てるいくつかの方法を試しましたが、すべて同じリークが発生するようです。パフォーマンス ツールによると、NSCFString、NSCFDictionary、および NSCFArry からリークしています。dealloc で routeArray を解放すると正常に動作しますが、holderArray を解放すると、詳細ビューからマップに戻るたびにクラッシュします。for ループで使用される文字列と辞書を処理する方法について、私は本当に確信が持てないと思います。
詳細ビューを追加するだけで、次のように作成されます。
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{
NSString *selectedRouteName = [NSString stringWithFormat:@"%@",view.annotation.title];
RouteDetailView *rdc = [[RouteDetailView alloc] initWithNibName:@"RouteDetailView" bundle:nil];
[rdc setCurrentRoute:selectedRouteName];
[self.navigationController pushViewController:rdc animated:YES];
[rdc release];
}
以上、不明な点がありましたら申し訳ありません。私に知らせてください、私はそれを言い換えてみることができます.