我正在寻找使用Objective C在我的应用程序(Mac OS X或iOS)上存储大量相同类型基元的类型或数据结构。据我所知,NSNumber只存储一个原语(如果我错了,请纠正我) )。我要说,数千个整数或字符串。 哪个是在那里放置,存储和访问它们的最佳解决方案? NSSet,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary或其他什么?我知道它们有不同的功能,但我基本上只关心基本操作(放置,存储,检索)的性能。
答案 0 :(得分:10)
它仅取决于您希望如何添加,存储和删除此数据。
首先,让我们浏览一下Objective-C中可用的各种数据结构:
原始数组
这是Objective-C(或C)中用于存储基元的最基本的存储类型。
例如:int a[4] = {1, 2, 3, 4};
对此的限制是
<强>的NSArray 强>
这是一个用于存储对象的容器。任何类型为NSObject
(或继承自NSObject
)或类型为“id”的对象都可以存储在NSArray
中。
<强>的NSMutableArray 强>
与NSArray
相同,但
NSSet
与NSArray
相同,但
<强>的NSMutableSet 强>
与NSSet
相同,但
<强> NSOrderedSet 强>
与NSArray
相同,即通过索引存储和检索对象,但
<强> NSMutableOrderedSet 强>
与NSMutableArray
相同,但
<强>的NSDictionary 强>
可以存储任何类型的数据。
<强>的NSMutableDictionary 强>
与NSDictionary
这是关于Objective-C中主要使用的数据结构的简短描述。这些是根据程序的需要以及如何操作数据来使用的。
因此,
NSMutableArray
。如果您以后不打算添加,删除或修改任何对象,请使用NSArray
。NSOrderedSet
/ NSMutableOrderedSet
NSSet
/ NSMutableSet
。NSDictionary
/ NSMutableDictionary
关于效果
NSSet
不包含任何订单,因此效果优于NSArray
Here是一篇关于上述每个数据结构的性能特征的非常详细的文章
Class Time [ms] 1,000,000 elements
添加
NSMutableOrderedSet 3190.52
NSMutableDictionary 2522.47
NSMutableSet 2511.96
NSMutableArray 1423.26
NSSet 8.03
随机访问
NSMutableOrderedSet 10.74
NSMutableDictionary 9.18
NSMutableArray 8.08
NSMutableSet 4.47
NSSet 3.56
要了解有关Objective-C数据类型和数据结构的更多信息,请阅读this