考虑 this extension在将 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
,我是否需要确保在复制缓冲区后销毁该指针?
最佳答案
UnsafePointer(self.bytes)
只是 UnsafePointer<Void>
的指针转换至 UnsafePointer<UInt8>
(就像 C 中的“类型转换”)。它不分配内存。
内存由 NSData
管理目的。你没有alloc()
这
内存,因此不能调用 dealloc()
在指针上。
你也没有initialize()
内存,因此不能
destroy()
关于swift - 我是否需要释放一个 UnsafeBufferPointer 或在缓冲区指针的起始内存位置使用的 UnsafePointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38592754/