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

标签 swift unsafe-pointers

考虑 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/

相关文章:

pointers - 在 Go 中将 **T 转换为 *unsafe.Pointer

go - 如何在Golang中将* uint16指针传递给windows.CreateFile()

swift - 将 C char 数组(不安全指针)转换为 String

ios - 使用 Swift 从 CSV 初始化 CoreData

arrays - Swift 3 使用 UserDefaults 保存数组

ios - UITableViewCells 不会加载索引超出范围

swift - UnsafePointer<Int8> 不工作

c - 如何将我的 swift 类转换为像 objective-c 中的 __bridge 这样的 UnsafePointer

ios - 如何设置 UICollectionView 填充 UIEdgeInsets

ios - swift |计时器不会在无效调用时停止,而是加速?