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


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:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。