小编Ana*_*i P的帖子

NSData /数据存储是否连续?

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

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

swift

8
推荐指数
1
解决办法
334
查看次数

确定数据实例是否连续

令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

0
推荐指数
1
解决办法
55
查看次数

标签 统计

swift ×2