我在 Swift 3 中使用以下调用分配字节:
let wordSize = 2
let numbytes = 1024*wordsize
var ptr = UnsafeMutableRawPointer.allocate(bytes: numbytes, alignedTo: wordSize)
问题是释放内存是否正确,这两个调用是一样的,还是我应该使用一个而不是另一个?
free(ptr) // opt 1
ptr.deallocate(bytes: numbytes, alignedTo: wordSize) //opt 2
最佳答案
Swift 4 将此签名更改为 deallocate()
,与 free(_:)
相比,更容易做出决定。
作为Hamish pointed out ,deallocate
是在 Swift 中解除分配不安全指针的首选方式,API 设计者将此函数放在类型和记录它,而 free(_:)
是全局范围的(在 Swift 中很少适用)并且没有记录。
关于Swift 解除分配与免费使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43717988/