iOS中的NSSet/NSArray/NSDictionary可以有多大?

5

我认为首先要描述一下我正在尝试做什么,然后再问我的问题。

背景

我有大量的单词(可能多达5,000个)。我想能够在屏幕上显示随机的3个单词,当用户按下按钮时,它将显示另外3个随机单词,但不能重复显示(即不再向用户呈现相同的单词)。这将循环直到一个计时器运行完毕。

可能的解决方案

如果单词数量较少,我会将它们添加到NSMutableSet中,使用-anyObject 3次获取单词,然后每次从集合中删除这3个单词,以便在下次调用-anyObject时不再使用。但是问题在于我不知道是否可以在iOS中拥有包含5,000个NSString的集合。

问题

所以我的问题是:

  1. 我可以在iOS中拥有大约5,000个字符串的集合对象(NSSet、NSArray、NSDictionary)而没有任何性能问题吗?
  2. 如果不行,我该如何从文件中读取子集字符串来获得可接受的数组大小,然后在清空该数组后提取更多的内容?
  3. 最佳存储这些字符串的方法是什么?它们只是单词,所以不是很长。我考虑将它们添加到一个文件中,每行一个字符串,并在应用程序加载时将它们读入到集合对象中。

提前感谢您的帮助。


3
任何 iOS/Cocoa 集合类都应该可以处理大约 5000 个对象,没有任何理由不能做到。您是否注意到性能方面的影响? - QED
说实话,我还没有尝试过!也许我只是太担心了!我从来没有想过要考虑那些苹果类有多么优化。顺便感谢您的快速回复! :-) - Grant J
2
我同意psoft的观点。5000个字符串并不算太大。它可能比您应用程序的图标或其他图形要小。此外,“-[NSSet anyObject]”不能依赖于其随机性。 - Ken Thomases
https://dev59.com/u0vSa4cB1Zd3GeqPf55A - Adam
2个回答

5

为了了解我们正在查看哪些内存维度:5000个8个字母的单词可以使用UTF-8(每个字母8位)表示为

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

即使NSArrayNSSet等的开销将使该大小增加一倍或三倍(它肯定不会),您也不必担心。 iPhone 4S具有1 GB的RAM大小,即1,048,576 kB,是您对象大小的数万倍。 简而言之:不用担心。

您可以将单词存储在文本文件中,用空格分隔,然后使用以下命令将其读入NSArray中:

NSArray *testArray = [stringOfTextfileContent componentsSeparatedByString:@" "];

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接