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


Swift UnsafeMutableRawPointer initializeMemory(as:from:count:)用法及代碼示例

實例方法

initializeMemory(as:from:count:)

使用從給定指針開始的值初始化此指針引用的內存,將內存綁定到值的類型,並返回指向初始化內存的類型化指針。

聲明

@discardableResult func initializeMemory<T>(
    as type: T.Type,
    from source: UnsafePointer<T>,
    count: Int
) -> UnsafeMutablePointer<T>

返回值

指向此原始指針引用的內存的類型化指針。

參數

type

將此內存綁定到的類型。

source

指向要複製的值的指針。 source..<(source + count) 區域中的內存必須初始化為類型T,並且不能與目標區域重疊。

count

要複製到內存中的value 的副本數。 count 不能為負數。

詳述

此指針引用的內存必須未初始化或初始化為普通類型,並且必須正確對齊才能訪問 T

下麵的示例分配足夠的原始內存來容納 Int8 的四個實例,然後使用 initializeMemory(as:from:count:) 方法初始化分配的內存。


let count = 4
let bytesPointer = UnsafeMutableRawPointer.allocate(
        byteCount: count * MemoryLayout<Int8>.stride,
        alignment: MemoryLayout<Int8>.alignment)
let values: [Int8] = [1, 2, 3, 4]
let int8Pointer = values.withUnsafeBufferPointer { buffer in
    return bytesPointer.initializeMemory(as: Int8.self,
              from: buffer.baseAddress!,
              count: buffer.count)
}
// int8Pointer.pointee == 1
// (int8Pointer + 3).pointee == 4


// After using 'int8Pointer':
int8Pointer.deallocate()

在原始指針 p 上調用此方法後,從 p 開始並繼續到 p + count * MemoryLayout<T>.stride 的區域將綁定到類型 T 並初始化。如果T 是非平凡類型,您最終必須取消初始化或從該區域中的值移動以避免泄漏。 source..<(source + count) 區域中的實例不受影響。

可用版本

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

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 UnsafeMutableRawPointer initializeMemory(as:from:count:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。