2017-10-18 166 views
0

给定UnsafeMutablePointer的实例,在deallocate(capacity:)之前拨打deinitialize(count:)有什么意义?Swift UnsafeMutablePointer:我必须在释放之前调用deinitialize吗?

难道你只是打电话给deallocate(capacity:)


我读书节上raywenderlich.com“使用类型指针”的文章Unsafe Swift: Using Pointers And Interacting With C的时候看到这个。

该文章包含下面的代码,您可以将其添加到Xcode的新游乐场。

let count = 2 
let stride = MemoryLayout<Int>.stride 
let alignment = MemoryLayout<Int>.alignment 
let byteCount = stride * count 

do { 
    print("Typed pointers") 

    let pointer = UnsafeMutablePointer<Int>.allocate(capacity: count) 
    pointer.initialize(to: 0, count: count) 
    defer { 
    pointer.deinitialize(count: count) 
    pointer.deallocate(capacity: count) 
    } 

    pointer.pointee = 42 
    pointer.advanced(by: 1).pointee = 6 
    pointer.pointee 
    pointer.advanced(by: 1).pointee 

    let bufferPointer = UnsafeBufferPointer(start: pointer, count: count) 
    for (index, value) in bufferPointer.enumerated() { 
    print("value \(index): \(value)") 
    } 
} 

回答

0

文章解释下面的代码,如果你继续阅读。

更新:由用户atrick在下面的评论中指出,去初始化仅需要非平凡类型。也就是说,包括去初始化是一种很好的方式,可以在将来更改为不重要的情况下对将来的代码进行验证。另外,它通常不会花费任何代价,因为编译器会优化它。

相关问题