NSData /数据存储是否连续?

时间:2016-11-19 02:49:17

标签: swift

Data / NSData字节是否保证存储在连续的内存中?查看文档(https://developer.apple.com/reference/foundation/data),我的印象是可以使用withUnsafeBytes()withUnsafeMutableBytes()访问字节的连续表示。但是,当调用这些方法时,可能会将字节从非连续存储复制到连续块。

我认为通过那些withUnsafe...方法访问字节时复制字节会有些低效,并且当使用init(bytesNoCopy: ...)初始值设定项时,字节显然是连续存储的,所以我倾向于认为它们总是连续存储,但没有看到任何明确陈述的文档。

2 个答案:

答案 0 :(得分:6)

不,不保证数据存储在连续的内存中。但是,如果您使用withUnsafeByteswithUnsafeMutableBytes,它会将其复制到一个位置,该位置将使数据位于单个连续块中。如果您不想产生这种开销,最好调用enumerateBytes,如果数据当前不连续,将为每个单独的内存块调用闭包一次,避免开销将完整数据复制到新的连续块。

答案 1 :(得分:1)

withUnsafeBytes的存在是一种记录他们保留不连续存储字节的权利的方式,但可以按需提供这些字节。

这可能是因为他们想象NSData将被移植到内存受限的环境中,并且他们不希望您拥有系统相关的代码。