UnsafeMutableRawPointer用类方法初始化必须指定分配内存大小和对其方式
let count = 3
let rawPtr = UnsafeMutableRawPointer.allocate(bytes: MemoryLayout<Int>.stride*count, alignedTo: MemoryLayout<Int>.alignment)//初始化无类型指针
let ptr = rawPtr.initializeMemory(as: Int.self, at: 0, count: 2, to: 1)
//初始化3个Int都是1的实例 返回类型指针 以后释放实例
rawPtr.load(fromByteOffset: 0, as: Int.self)
//访问第一Int变量 1
ptr.deinitialize(count: 2)
//释放实例
rawPtr.storeBytes(of: 2, toByteOffset: 0, as: Int.self)
//指针指向变量2
rawPtr.load(fromByteOffset: 0, as: Int.self)
// 2
rawPtr.deallocate(bytes: MemoryLayout<Person>.stride*count, alignedTo: MemoryLayout<Person>.alignment)
//释放指针内存
用storeBytes方法是直接指向变量的原始内存 所以不需要释放变量。
类型指针可以转换成原始指针
let count = 3
let ptr = UnsafeMutablePointer<Int>.allocate(capacity: count)
for i in 0..<count{
ptr[i] = i + 1//赋值 1 2 3
}
let rawPtr = UnsafeMutableRawPointer(ptr)//转换成原始指针
for step in stride(from: 0, to: count*MemoryLayout<Int>.stride, by: MemoryLayout<Int>.stride){
let a = rawPtr.load(fromByteOffset: step, as: Int.self)// 按照字节偏移取值
print("a===\(a)")// 1 2 3
}
ptr.deinitialize(count: count)//释放
ptr.deallocate(capacity: count)