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에 설명 된대로.