我是否需要释放 UnsafeBufferPointer 或在缓冲区指针的起始内存位置使用的 UnsafePointer?

JAL*_*JAL 3 unsafe-pointers swift

考虑这个将对象序列化为十六进制字符串的扩展:NSDataNSData

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("")
    }
}
Run Code Online (Sandbox Code Playgroud)

如果 anUnsafeBufferPointer是非拥有指针,这是否意味着我不需要(或无法)显式调用 destroy?如果我UnsafePointer从对象字节的内存中创建一个NSData指针,我是否需要确保在复制缓冲区后销毁该指针?

Mar*_*n R 5

UnsafePointer(self.bytes)只是从UnsafePointer<Void>到 的指针转换UnsafePointer<UInt8>(类似于 C 中的“强制类型转换”)。它不分配内存。

内存由NSData对象管理。您没有alloc()内存,因此不能调用dealloc()指针。你也没有initialize()记忆,因此也不能有 destroy()记忆。