Data / NSData字节是否保证存储在连续的内存中?查看文档(https://developer.apple.com/reference/foundation/data),我的印象是可以使用withUnsafeBytes()
或withUnsafeMutableBytes()
访问字节的连续表示。但是,当调用这些方法时,可能会将字节从非连续存储复制到连续块。
我认为通过那些withUnsafe...
方法访问字节时复制字节会有些低效,并且当使用init(bytesNoCopy: ...)
初始值设定项时,字节显然是连续存储的,所以我倾向于认为它们总是连续存储,但没有看到任何明确陈述的文档。
答案 0 :(得分:6)
不,不保证数据存储在连续的内存中。但是,如果您使用withUnsafeBytes
或withUnsafeMutableBytes
,它会将其复制到一个位置,该位置将使数据位于单个连续块中。如果您不想产生这种开销,最好调用enumerateBytes
,如果数据当前不连续,将为每个单独的内存块调用闭包一次,避免开销将完整数据复制到新的连续块。
答案 1 :(得分:1)
withUnsafeBytes
的存在是一种记录他们保留不连续存储字节的权利的方式,但可以按需提供这些字节。
这可能是因为他们想象NSData将被移植到内存受限的环境中,并且他们不希望您拥有系统相关的代码。