0

パフォーマンス上の理由から、膨大な量の任意のバイナリ データに plist や xml を使用することはお勧めできません。

私のデータ形式が(いくつかの文字列、整数、バイナリデータ)の配列であり、バイナリデータのサイズが数メガバイトを超え(固定されていません)、配列のサイズが数百であるとします。Documents ディレクトリの 1 つのファイルにデータ全体をシリアル化して保存し、そのファイルから一部のデータのみをメモリに読み取りたいと考えています。そのため、最初は plist を使用することが要件を達成する方法であると考えましたが、上記のように良い方法ではありません。

この問題を回避する 1 つの方法は、バイナリ データの代わりにバイナリ データのパスを使用することです。その後、Core Data などを使用できます。しかし、それでは要件を満たしていません。

適切なフレームワークを見つけるのに数日を費やしましたが、何もないようです。私の場合、独自のエンコーディングおよびデコンディング メソッドを作成する必要がありますか? NSArchiving は私の要件を達成するのに十分ですか?

4

2 に答える 2

1

NSCodingは実際にはバイナリPlistを作成するだけなので、パフォーマンスは同様になります(アプリに埋め込まれたXML Plistは、ビルド時にバイナリに変換されます)。

(参考までに、NSCodedファイルを取得して最後に.plistを付けると、Plistエディターで開いてすべてのプロパティを表示できますが、内容は通常のplistのように人間が読める形式ではありません)、

ただし、Plistはかなり高速です。おそらく、サイズが数MBのファイルには十分な速度です。これにPlistを使ってみたことがありますか?

もう1つの方法は、JSONファイルを使用してJSONKitでロードすることです。JSONKitは、バイナリplistよりも読み込みが速いというパフォーマンスをベンチマークしています:http://www.cocoanetics.com/2011/03/json-versus-plist-the-ultimate-showdown/

それでも十分な速度が得られない場合は、SQLLiteデータベースに保存するのが次善の策ですが、それはもっと手間がかかります。データベースは通常、ファイルの一部のみをロードする場合にはるかに優れていますが、ロット全体をメモリにロードする必要がないため、必要な部分を取得するだけで済みます。

于 2012-02-09T16:56:28.250 に答える
0

XML またはテキスト Plist を使用したくない場合。NSCoding最初に & friendsを試すと思います。 Archives and Serialization Guideを参照してください。しかし、本当にすべてを 1 つのファイルに保存してから、その一部だけを読み取る必要がある場合は、自分で行う必要があると思います。データベースはどうですか?

于 2012-02-09T16:32:31.217 に答える