当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


Swift UnsafeRawBufferPointer用法及代码示例

结构

UnsafeRawBufferPointer

内存区域中字节的非拥有集合接口。

声明

@frozen struct UnsafeRawBufferPointer

概述

您可以在低级操作中使用UnsafeRawBufferPointer 实例来消除唯一性检查和释放模式边界检查。边界检查始终在调试模式下执行。

UnsafeRawBufferPointer 实例是内存区域中原始字节的视图。内存中的每个字节都被视为一个UInt8 值,与该内存中保存的值的类型无关。通过原始缓冲区从内存中读取是一种无类型操作。

除了集合接口之外,UnsafeRawBufferPointer 实例还支持 UnsafeRawPointer 提供的 load(fromByteOffset:as:) 方法,包括调试模式下的边界检查。

要通过类型化操作访问底层内存,内存必须绑定到普通类型。

UnsafeRawBufferPointer 语义

UnsafeRawBufferPointer 实例是内存视图,并不拥有它引用的内存。复制UnsafeRawBufferPointer 类型的变量或常量不会复制底层内存。但是,使用 UnsafeRawBufferPointer 实例初始化另一个集合会将字节从引用的内存复制到新集合中。

以下示例使用 someBytes (一个 UnsafeRawBufferPointer 实例)来演示分配缓冲区指针和使用缓冲区指针作为另一个集合元素的源之间的区别。在这里,对 destBytes 的赋值创建了一个新的、非拥有的缓冲区指针,覆盖了 someBytes 引用的内存的前 n 字节——没有任何内容被复制:


var destBytes = someBytes[0..<n]

接下来,destBytes 引用的字节被复制到 byteArray 一个新的 [UInt8] 数组中,然后将 someBytes 的其余部分附加到 byteArray


var byteArray: [UInt8] = Array(destBytes)
byteArray += someBytes[n..<someBytes.count]

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 UnsafeRawBufferPointer。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。