gpt4 book ai didi

ios - 使用 Objective C 存储数据最可靠和最快的类型或数据结构是什么?

转载 作者:可可西里 更新时间:2023-11-01 06:21:35 24 4
gpt4 key购买 nike

我正在寻找类型或数据结构来使用 Objective C 在我的应用程序(Mac OS X 或 iOS)上存储大量相同类型的原语。据我所知,NSNumber 仅存储一个原语(如果我错了请纠正我).比方说,我有数千个整数或字符串。 哪个是放置、存储和访问它们的最佳解决方案? NSSet、NSArray、NSMutableArray、NSDictionary、NSMutableDictionary 还是其他?我知道它们有不同的特性,但我基本上只关心基本操作(放置、存储、检索)的性能。

最佳答案

这仅取决于您希望如何添加、存储和删除此数据。

首先让我们了解一下 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

关于ios - 使用 Objective C 存储数据最可靠和最快的类型或数据结构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29632886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com