0

構築中のアプリケーションの 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];


}

以上、不明な点がありましたら申し訳ありません。私に知らせてください、私はそれを言い換えてみることができます.

4

1 に答える 1

3

testStringの多くとも 1 つのキーについて true になりますholderArrayか? もしそうなら、おそらく設定後にループから抜け出す必要がありますrouteArray。そうでない場合は、routeArray複数回設定している可能性があり、最後に割り当てた配列を除くすべてがリークされます。

また、私はあなたがリリースするのを見ませんholderArray

于 2009-11-18T20:04:13.770 に答える