6

私たちのアプリは、最小限のリモート http リクエストで大量のデータを表示する必要があるため、必要なすべてのデータを単一の json レスポンスとして提供するエンドポイントをバックエンドに追加しました。これにより、約 1.5 MB (圧縮) または約 8 MB の圧縮されていない json 形式のテキストが生成されます。

大きな問題はありません。ダウンロードは 10 ~ 30 秒で完了し、ASIHTTPRequest を使用して応答全体をディスクに書き込みます。

ここからが楽しい部分です。圧縮されていないファイルをメモリ マップされた文字列に読み取った後、stig のjson-frameworkを使用してそれを NSDictionary に変換します。これは、アプリの残りの部分と、残りの API エンドポイントの典型的な 2 KB json 応答で非常にうまく機能しています。ただし、これらの 8 MB のデータのデシリアライズには、数秒 (シミュレーター) から数分 (3G および第 2 世代 iPod Touch) かかります。

私は、このすべてのデータを読み取るための最良のアプローチを研究しています。

バックエンドから直接提供されるバイナリ plist を使用したいのですが、Java を使用しており、要件に合った適切なライブラリが見つかりませんでした。締め切りが非常に厳しいため、独自のライブラリを作成することは最善のアイデアではない可能性があります。

なんらかの方法で役立つ場合、解析している json 文字列は、ほとんどの場合、次のような X 項目の配列です。

{
    "items": [ { "key1": "value1", "key2": "value2" },
               { "key1": "value1", "key2": "value2" },
               { "key1": "value1", "key2": "value2" },
               { "key1": "value1", "key2": "value2" },
               { "key1": "value1", "key2": "value2" },
               { "key1": "value1", "key2": "value2" }
             ]
}

この 8 MB の json 形式の文字列をメモリ内の NSDictionary に読み込む最も効率的な方法は何ですか?

4

2 に答える 2

7

JSONKitを見てください。これは非常に高速であり、JSON に (よくあることですが) 繰り返される多くのキーと値がある場合、その "最近インスタンス化されたオブジェクト キャッシュ" は "final" に使用されるメモリの量を劇的に削減しNSDictionaryます。

于 2010-12-04T09:45:25.203 に答える
2

JSONKit は YAJL より高速ですが、YAJL はストリームの解析をサポートしています。ダウンロードにJSONを解析するために、ASIHTTPRequestと接続できるはずです。ここで、「データが利用可能になったときのドキュメント スタイルの解析」というラベルの付いたセクションを確認してください。

http://gabriel.github.com/yajl-objc/

于 2010-12-20T02:13:29.080 に答える