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
が72である「H」のUTF8の値であることを期待したい、と私たちは1で進めるとき、私たちはその後、101である「E」の値へのポインタを持っている、すなわち私たちはArrayを使って作業を進めています。しかし、配列内の各項目のメモリアドレスが連続していると仮定しているため、実際にはそうしたくないかもしれません。バイトを検索する
より冷静なアプローチは次のようになります
data.withUnsafeBytes { [UInt8](UnsafeBufferPointer(start:$0, count:data.count))
}
又はよりよくは:
[UInt8](data)
this postで概説したように。