3

考虑这个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("")
    }
}

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

4

1 回答 1

4

UnsafePointer(self.bytes)只是从UnsafePointer<Void>to的指针转换UnsafePointer<UInt8>(就像 C 中的“强制转换”)。它不分配内存。

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

于 2016-07-26T15:16:26.627 回答