當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。