pointee
是指針存儲和指向的值。它在早期版本的Swift中曾被稱爲memory
。不要在斯威夫特使用指針,除非你絕對必須的,因爲它涉及到你的保留和手動釋放內存:
UnsafePointer沒有提供自動內存管理或對齊 保證。您有責任通過不安全的指針處理任何 內存的生命週期,以避免泄漏或未定義的行爲。
在你的例子中,你沒有數據,但是如果你有數據,那麼第一個指針將首先指向數據數組中第一個值的內存地址,例如,
var str = "Hello, playground"
guard let data = str.data(using: .utf8) else {fatalError()}
data.withUnsafeBytes { (uPtr: UnsafePointer<UInt8>) in
let ptr = uPtr
ptr.pointee // 72
let ptr2 = ptr.advanced(by: 1)
ptr2.pointee // 101
}
因此,這裏我們期望ptr.pointee
爲「H」,這是72,的值UTF8,當我們通過1推進我們然後有一個指針到「e」,這是101,即所述值我們正在通過陣列工作。但是你不希望這樣做,因爲它假定數組中每個項目的內存地址都是連續的,它們可能不是。
有一個更清醒的方法來檢索字節是:
data.withUnsafeBytes { [UInt8](UnsafeBufferPointer(start:$0, count:data.count))
}
或者更好的是:
[UInt8](data)
正如this post概述。