这是一个非常新手的问题,但iPhone API是否提供了可以使用的任何数据结构(即链表,哈希映射等)?
答案 0 :(得分:18)
您可以在iPhone SDK上使用在C或C ++上实现的任何数据结构。
例如,我经常使用standard library。
除此之外,您还可以使用Cocoa的复杂数据结构,如:
您可以在其上here附上配套文件。
答案 1 :(得分:12)
Cocoa(在Mac和iOS上都可用的框架)实现several common collection types,包括NSArray
,NSDictionary
和NSSet
,以及它们的可变变体。 (Leopard还介绍了NSPointerArray
,NSHashMap
和NSHashTable
,一个带有附加选项的数组/字典/集(比如使用弱引用),这使得它们在收集的垃圾中使用相当方便然而,这些类目前在iPhone上不可用,并且目前没什么意义,因为iOS不支持垃圾收集。)这些类非常快,适用于任何Cocoa的通用用途应用
除了这些提供的结构之外,您还有以下几种选择:(1)使用这些构建块创建更复杂的结构,(2)利用现有的第三方代码,或(3)从头开始构建自己的数据结构。
一个选项是CHDataStructures.framework,这是我维护的开源Objective-C框架。它实现了其他几种常见的数据结构,例如stack / queue / deque,链表,排序集等。这些结构采用NSCoding和NSCopying(在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,包括链接列表和其他数据结构。