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

只是想知道我们正在查看哪些内存维度:5000 个单词,每个单词 8 个字母,可以用 UTF-8(每个字母 8 位)表示

5000 * 8 * 8 = 320,000 位 = 40,000 字节 < 40 kB

即使 a 等的开销NSArray增加一倍或三倍(它当然不会),你会没事的NSSet。iPhone 4S 的 RAM 大小为 1 GB,即 1,048,576 kB,是对象大小的几万倍。简而言之:别担心。

您可以将您的单词存储在一个文本文件中,用空格分隔,然后简单地将它们读入NSArraywith

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

限制取决于您可用的内存量。

于 2012-06-03T09:15:44.857 回答