NSSets如何存储在内存中,并使它们更有效

时间:2011-09-15 11:01:30

标签: objective-c ios

我一直都知道NSArray中的数据是连续存储在计算机的内存中(一个接一个的对象)。我的问题是如何存储NSSet?如果每个对象存储在计算机内存中的不同位置,那么它会比数组慢吗?

干杯

NSSets是否更像链接列表?

4 个答案:

答案 0 :(得分:3)

NSArray使用的存储空间未记录在案。而且你不应该假设所有数组都是一样的。在ridiculousfish.com上有一篇很好的文章,Our arrays aren’t

如果您想知道您的要求最快的是什么。您必须自己进行测试,或者更具体地说明您打算如何使用NSSet

答案 1 :(得分:2)

使用NSArray还是NSSet不应该取决于它们的性能特征,而应该取决于您想要表示的语义。

NSArray是一个有序集合 - 没有漏洞 - 由索引访问的项目。允许重复。 NSSet是无序的,不能存储两次相同的对象。

如果不知道自己想做什么,就很难说出更多。

答案 2 :(得分:2)

创建NSArray比创建NSSet要快得多。但是在NSSet中搜索所有对象比在NSArray中搜索所有对象要快得多,尤其是使用indexOfObject:方法搜索NSArray。 (您可以自己测试,10,000个对象应该足以向您展示差异。)

但是当你选择应该使用哪种时候,速度并不是最重要的考虑因素。

如果要确保一个对象只应存储在ONCE上,请使用NSSet,否则使用NSArray,您的对象将在插入时存储多少次。当然,NSArray的对象也是有序的。

答案 3 :(得分:1)

NSArray,NSMutableArray,NSSet,NSMutableSet和其他集合的实现会根据集合中的对象数量而变化。你会发现更多细节 here以及此blog post中的更深入分析。

正如@ Jean-Denis建议的那样,你应该根据他们的语义来选择你的收藏。