0

NSOperation を使用してデータをダウンロードする際のベスト プラクティスについて質問があります。現在、NSOperationQueue を使用して、リモート サーバー上の JSON データに対して複数の要求を行っています。データが入ってきたら、それを 1 つの大きな NSDictionary に分割し、for ループを使用してデータを解析し、データを NSMutableDictionaries にロードしてから、次のリクエストに進みます。私の質問は、この同じシーケンスを何度も何度も実行していることです。データをダウンロードし、すべてのダウンロードが完了したら、JSON を必要な辞書に解析する方がよいのではないかと考えています。 、おそらく私が考えていない、これを行うためのより良い方法がありますか?インストゥルメントを使用して割り当ての合計を確認したところ、このプロセス中に約 30 MB が蓄積されているようです。

この件に関するアドバイスをいただければ幸いです。

これは NSOperation コードの小さなサンプルです

          plantPackKeys = [NSMutableDictionary dictionaryWithDictionary:data];
          queueTwo = [NSOperationQueue new];
          [queueTwo setMaxConcurrentOperationCount:4];

          for(id key in data){
             @autoreleasepool {
                urlKey = @"";
                urlKey = [data objectForKey:key];
                DownloadOperation *downLoad = [[DownloadOperation alloc] initWithURL:[NSURL URLWithString:urlKey]];
                [downLoad addObserver:self forKeyPath:@"isFinished" options:NSKeyValueObservingOptionNew context:NULL];
                [queueTwo addOperation:downLoad];
              }
          }
4

1 に答える 1

1

どのオブジェクトがこの量のメモリを消費しているかを知ることは興味深いでしょう。サーバーからのデータ パッケージを分割することで、メモリ フットプリントを削減できます。もう 1 つの質問は、そんなに多くのデータをメモリに保持する必要があるかどうかです。

CoreData や生の SQLite などの他のバックエンドを使用して、データを解析しながらディスクに保存できます。利点は、シリアライズされた NSDictionaries の場合のように、一度にすべてをメモリにロードしないことです。

于 2013-02-15T18:07:25.553 に答える