5

最初に自分がやろうとしていることを説明してから、質問をする必要があると思います。

バックグラウンド

大量の単語があります (最大 5,000 になる可能性があります)。これらの単語のランダムな3つを画面に表示できるようにしたいのですが、ユーザーがボタンを押すと、別の3つのランダムな単語が表示されますが、重複はありません(つまり、同じ単語をユーザーに再度表示することはありません)。これは、タイマーが切れるまでループします。

考えられる解決策

単語数が少ない場合は、これらを NSMutableSet に追加し、-anyObject を 3 回使用して単語を取得し、そのたびにセットから 3 つの単語を削除して、次に呼び出すときに再び使用されないようにします。 -任意のオブジェクト。これに関する問題は、iOS で 5,000 個の NSString を含むセットを使用できるかどうかわからないことです。

質問

だから私の質問は

  1. iOS で約 5,000 個の文字列を含むコレクション オブジェクト (NSSet、NSArray、NSDictionary) をパフォーマンスの問題なく使用できますか?
  2. そうでない場合、ファイルから文字列のサブセットを読み取って許容可能な配列サイズを取得し、その配列を空にしたときにさらに引き出すにはどうすればよいでしょうか?
  3. これらの文字列を保存する最良の方法は何ですか? 言葉だけなので、それほど長いものではありません。各行に文字列を含むファイルにそれらを追加し、アプリケーションのロード時にそれらをコレクション オブジェクトに読み込むことを考えていました。

前もって感謝します。

4

2 に答える 2

5

私たちが見ているメモリの寸法を把握するために、それぞれ8文字の5000ワードをUTF-8(1文字あたり8ビット)で表すことができます。

5000 * 8 * 8=320,000ビット=40,000バイト<40kB

などNSArrayのオーバーヘッドがそのサイズの2倍または3倍になったとしても(確かにそうではありません)、問題はありません。iPhone4SのRAMサイズは1GB、つまり1,048,576 kBで、オブジェクトのサイズの数万倍です。要するに:心配しないでください。NSSet

単語をスペースで区切ってテキストファイルに保存し、NSArray単に

NSArray *testArray = [stringOfTextfileContent componentsSeparatedByString:@" "];
于 2012-06-03T09:32:51.483 に答える
2

制限は、使用可能なメモリの量によって異なります。

于 2012-06-03T09:15:44.857 に答える