我知道有一些关于Array
和ContiguousArray
之间区别的相关问题。
然而,答案集中在如何使用它们,而不是他们自己。
在官方文档中,他们说
ContiguousArray 类型是一个专用数组,它始终将其元素存储在连续的内存区域中。这与 Array 形成鲜明对比,如果 Array 的元素类型是类或@objc协议,则 Array 可以将其元素存储在连续的内存区域或 NSArray 实例中。
因此,在Array
元素是类或@objc协议的情况下,元素可能位于连续区域或NSArray
实例中。我以为Array
只有对象的指针。所以,我不明白毗连区域的含义。
NSArray
与Array
有什么关系?Array
只是NSArray
的包装吗?
谁能解释一下?
编辑: 当我发布问题时,我对此有些困惑。 想必ContiguousArray
没有指针?因为文档说ContiguousArray
总是将其元素存储在一个连续的区域。
Array
和ContiguousArray
本身没有引用语义。如果将值类型的实例存储在任一实例中,则数组的元素是原始实例的正确副本。指针是否有时为了优化(或桥接到Objective-C(而"在引擎盖下"使用只是一个实现细节,不是预期编程模型的一部分,因此不是你通常应该推理的事情。
但是,当关注低级性能时,ContiguousArray
可以保证元素像 C 数组一样连续地布置在内存中。常规Array
实例尽可能提供相同的优化(当其元素是枚举或结构时(。在其他情况下,它确实可以表现为NSArray
的包装器。