我可以使用UnsafeMutablePointer.deallocate(capacity:)
以前使用分配了内存的指针malloc
吗?即,deallocate
行为是否类似free
?
发生这种情况的一种情况是从Swift调用C函数时,这些函数使用分配内存,malloc
并期望调用方free()
稍后再访问该内存。一个例子是LIBMTP_Detect_Raw_Devices
功能(见这里的一个例子使用)。该函数期望调用者释放rawdevices
在函数内部分配的内存()。
文档尚不清楚,但是测试表明存在互操作性。
malloc()
在C中使用,然后deallocate()
在Swift中调用并尝试使用C中free()
的指针(反之亦然)将导致运行时错误,但是如果仅使用deallocate()
或之一free()
,但不能同时使用两者,则代码可以正常运行。
类似地,在Swift中分配结构,然后deallocate()
在Swift和free()
C中(或相反)使用结构也会导致运行时错误。
也可以free()
按照@jtbandes的建议在Swift中使用。实际上,这种方法可能比调用更为安全deallocate()
。
至于文档,请参阅https://developer.apple.com/reference/swift/unsafemutablepointer。
此外,您还可以UnsafeMutablePointer
在此处浏览的源代码:https : //github.com/apple/swift/blob/master/stdlib/public/core/UnsafePointer.swift.gyb
我还没有时间弄清楚实现方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句