考虑这个关于NSData的扩展,它将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, $0)
}
return bytesAsHexStrings.joinWithSeparator("")
}
}
如果一个 UnsafeBufferPointer
是一个非拥有指针,那么这是否意味着我不需要(或无法)显式调用 destroy? 如果我从 NSData
对象的字节内存中创建一个 UnsafePointer
,在缓冲区被复制后,我是否需要确保销毁该指针?
UInt8
是“平凡内容”,无论您是否调用destroy都无关紧要。 - Martin RUnsafePointer(self.bytes)
不会泄漏,因为一旦它超出作用域,它就会被释放? - JALUnsafePointer(self.bytes)
仅是从UnsafePointer<Void>
到UnsafePointer<UInt8>
的指针转换("cast")操作,它不会分配内存。这块内存由NSData
对象管理。 - Martin R