连续阵列的内部结构



我知道有一些关于ArrayContiguousArray之间区别的相关问题。

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

在官方文档中,他们说

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

因此,在Array元素是类或@objc协议的情况下,元素可能位于连续区域或NSArray实例中。我以为Array只有对象的指针。所以,我不明白毗连区域的含义。

NSArrayArray有什么关系?Array只是NSArray的包装吗?

谁能解释一下?

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

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

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

最新更新