iPhone开发:有哪些数据结构?

时间:2009-04-20 01:09:24

标签: iphone objective-c cocoa data-structures

这是一个非常新手的问题,但iPhone API是否提供了可以使用的任何数据结构(即链表,哈希映射等)?

3 个答案:

答案 0 :(得分:18)

您可以在iPhone SDK上使用在C或C ++上实现的任何数据结构。

例如,我经常使用standard library

除此之外,您还可以使用Cocoa的复杂数据结构,如:

  1. 的NSArray
  2. NSDictionary(hash)
  3. NSSet(set)
  4. 您可以在其上here附上配套文件。

答案 1 :(得分:12)

Cocoa(在Mac和iOS上都可用的框架)实现several common collection types,包括NSArrayNSDictionaryNSSet,以及它们的可变变体。 (Leopard还介绍了NSPointerArrayNSHashMapNSHashTable,一个带有附加选项的数组/字典/集(比如使用弱引用),这使得它们在收集的垃圾中使用相当方便然而,这些类目前在iPhone上不可用,并且目前没什么意义,因为iOS不支持垃圾收集。)这些类非常快,适用于任何Cocoa的通用用途应用

除了这些提供的结构之外,您还有以下几种选择:(1)使用这些构建块创建更复杂的结构,(2)利用现有的第三方代码,或(3)从头开始构建自己的数据结构。

一个选项是CHDataStructures.framework,这是我维护的开源Objective-C框架。它实现了其他几种常见的数据结构,例如stack / queue / deque,链表,排序集等。这些结构采用NSCodingNSCopying(在10.5+上加NSFastEnumeration),因此它们可以与原生Objective-C代码无缝协作。该项目允许您构建一个静态库,以便在iPhone上使用。由于此框架是开源的,因此如果需要,您甚至可以直接在项目中包含相关代码。

虽然你可以使用C ++和STL结构,但我发现混合Objective-C和C ++往往会更加混乱并导致棘手的错误,特别是对于初学者。这不是对C ++的抨击,只是“在罗马时”的原则。使用C ++时,STL当然是首选方法。如果你已经在使用C ++,你可能会觉得STL可能是个不错的选择;即便如此,我发现使用原生Cocoa集合会产生更加不言而喻的可读代码。

答案 2 :(得分:-4)

Objective-C语言不提供任何固有的数据结构,如链接列表等。但是,由于它基于C / C ++代码库,所以可以用C或C ++实现的任何东西都可以直接在Objective中完成。 -C,包括链接列表和其他数据结构。