我是否需要释放一个 UnsafeBufferPointer,或者在缓冲区指针的起始内存位置使用的 UnsafePointer?
Do I need to release an UnsafeBufferPointer, or the UnsafePointer used at the buffer pointer's starting memory location?
考虑 NSData
上的 this extension,它将 NSData
对象序列化为十六进制字符串:
extension NSData {
func base16EncodedString(uppercase uppercase: Bool = false) -> String {
let buffer = UnsafeBufferPointer<UInt8>(start: UnsafePointer(self.bytes), count: self.length)
let hexFormat = uppercase ? "X" : "x"
let formatString = "%02\(hexFormat)"
let bytesAsHexStrings = buffer.map {
String(format: formatString, [=10=])
}
return bytesAsHexStrings.joinWithSeparator("")
}
}
如果 UnsafeBufferPointer
是非拥有指针,是否意味着我不需要(或不能)显式调用 destroy?如果我从 NSData
对象的字节内存中创建一个 UnsafePointer
,我是否需要确保在复制缓冲区后销毁该指针?
UnsafePointer(self.bytes)
只是从 UnsafePointer<Void>
到 UnsafePointer<UInt8>
的指针转换(类似于 C 中的 "cast")。它不分配内存。
内存由NSData
对象管理。你没有 alloc()
内存,因此不能在指针上调用 dealloc()
。
您也没有 initialize()
记忆,因此一定不要
destroy()
它。
考虑 NSData
上的 this extension,它将 NSData
对象序列化为十六进制字符串:
extension NSData { func base16EncodedString(uppercase uppercase: Bool = false) -> String { let buffer = UnsafeBufferPointer<UInt8>(start: UnsafePointer(self.bytes), count: self.length) let hexFormat = uppercase ? "X" : "x" let formatString = "%02\(hexFormat)" let bytesAsHexStrings = buffer.map { String(format: formatString, [=10=]) } return bytesAsHexStrings.joinWithSeparator("") } }
如果 UnsafeBufferPointer
是非拥有指针,是否意味着我不需要(或不能)显式调用 destroy?如果我从 NSData
对象的字节内存中创建一个 UnsafePointer
,我是否需要确保在复制缓冲区后销毁该指针?
UnsafePointer(self.bytes)
只是从 UnsafePointer<Void>
到 UnsafePointer<UInt8>
的指针转换(类似于 C 中的 "cast")。它不分配内存。
内存由NSData
对象管理。你没有 alloc()
内存,因此不能在指针上调用 dealloc()
。
您也没有 initialize()
记忆,因此一定不要
destroy()
它。