Data/NSData字节是否保证存储在连续的内存中?查看文档(https://developer.apple.com/reference/foundation/data),我的印象是人们可以使用withUnsafeBytes()
或访问字节的连续表示withUnsafeMutableBytes()
.但是,当调用这些方法时,可能会将字节从非连续存储复制到连续块.
我认为通过这些withUnsafe...
方法访问它们时复制字节会有些低效,并且当使用init(bytesNoCopy: ...)
初始化程序时,字节显然是连续存储的,所以我倾向于认为它们总是连续存储,但是没有看到任何文档如此明确地陈述.
令d为Data的实例。在早期的Swift版本中,我可以使用类似以下的代码来测试它在内存中是否连续
d.enumerateBytes{(pBuf: UnsafeBufferPointer<UInt8>, idx: Data.Index, flag: inout Bool) -> Void in
if (pBuf.count == d.count) { print("Data is contiguous!") }
}
Run Code Online (Sandbox Code Playgroud)
但是,在Swift 5 enumerateBytes()
中已弃用,并且收到如下警告:
warning: 'enumerateBytes' is deprecated: use `regions` or `for-in` instead
Run Code Online (Sandbox Code Playgroud)
我很想做类似的事情
if d.regions.count == 1 { print("Contiguous!!!") }
Run Code Online (Sandbox Code Playgroud)
但regions
类型为CollectionOfOne<Data>
,根据定义,该类型始终包含一个元素。
有什么建议么?
swift ×2