ContiguousArray的内部结构

时间:2017-08-02 06:18:00

标签: arrays swift

我知道ArrayContiguousArray之间存在一些相关的问题。

然而,答案集中在如何使用它们,而不是它们自己。

在官方文档中,他们说

  

ContiguousArray类型是一个专用数组,它始终将其元素存储在连续的内存区域中。这与Array形成对比,Array可以将其元素存储在连续的内存区域或NSArray实例(如果其Element类型是类或@objc协议)。

因此,在Array中,如果元素是类或@objc协议,则元素可能位于连续区域或NSArray实例中。我认为Array只有对象的指针。所以,我不理解一个连续区域的含义。

NSArrayArray有何关联? Array只是NSArray的包装吗?

有人可以解释一下吗?

编辑: 当我发布问题时,我对它有些疑惑。 据推测ContiguousArray没有指针?因为文档说ContiguousArray总是将其元素存储在一个连续的区域中。

1 个答案:

答案 0 :(得分:1)

ArrayContiguousArray本身没有参考语义。如果将值类型的实例存储在其中,则数组的元素是原始实例的正确副本。是否有时使用指针"引擎盖下#34;为了优化(或桥接到Objective-C)只是一个实现细节,不是预期的编程模型的一部分,因此通常不应该推理。

但是当低级性能时,ContiguousArray可以保证元素在内存中连续布局,就像C数组一样。常规Array实例在可能的情况下(当其元素是枚举或结构时)提供相同的优化。在其他情况下,它确实可以表现为NSArray的包装。