这是一个非常新手的问题,但是iPhone API提供了任何数据结构来使用吗(例如链表、哈希映射等)?
这是一个非常新手的问题,但是iPhone API提供了任何数据结构来使用吗(例如链表、哈希映射等)?
NSArray
、NSDictionary
和NSSet
,以及它们的可变版本。(Leopard还引入了NSPointerArray
、NSHashMap
和NSHashTable
,这是一组带有附加选项的数组/字典/集合(如使用弱引用),使它们在垃圾收集环境中使用起来非常方便。但是,这些类目前在iPhone上不可用,并且目前没有太大意义,因为iOS不支持垃圾回收。)这些类非常快速,并适用于任何Cocoa应用程序的通用用途。
除了这些提供的结构外,您有几个选择:(1)使用这些作为构建块创建更复杂的结构,(2)利用现有的第三方代码,或者(3)从头开始构建自己的数据结构。
一种选择是CHDataStructures.framework,这是一个我维护的开源Objective-C框架。它实现了其他常见的数据结构,如栈/队列/双端队列、链表、排序集等。这些结构采用NSCoding和NSCopying(加上10.5+的NSFastEnumeration),因此它们可以与本地Objective-C代码无缝配合使用。该项目还允许您构建用于iPhone的静态库。由于这个框架是开源的,如果需要,甚至可以直接将相关代码包含在您的项目中。
虽然您可以使用C++和STL结构,但我发现混合使用Objective-C和C++往往更加令人困惑,并导致难以解决的错误,尤其是对于新手。这并不是对C++的抨击,只是一个“入乡随俗”的原则。当使用C++时,STL当然是首选方法。如果您已经混合使用了C++,那么您可能足够熟悉它,STL可能是一个不错的选择;即使如此,我发现使用本地Cocoa集合会产生更加自明、可读性更高的代码。
Objective-C语言本身不提供任何类似于链表等的内置数据结构。然而,由于它基于C/C++代码库,因此可以直接在Objective-C中实现C或C++中可以实现的任何内容,包括链表和其他数据结构。
NS(Mutable)Array
不一定在C风格的数组中存储对象指针。它会根据您的使用方式动态更改其内部表示形式,包括C风格数组、链表和任何其他结构。 - Jack Lawrence