【iOS】Swift Unmanaged

2020-06-18  本文已影响0人  Loving_1109

我写文章的目的主要是做个记录和锻炼自己的写作能力,能力有限,如果有什么问题,欢迎指正!

在调用C方法的时候,往往需要传递一个对象的指针,而对于swift来说,用到指针的情况比较少。如果只是将一个对象的指针传递给C方法,可以如下简单方法获取对象的指针:

withUnsafeBytes(of: &self) { (ptr) -> Void in

 }
 
withUnsafePointer(to: &self) { (ptr) -> Void in
 }

假如通过这种方法传递对象的指针,就会在将指针转换成class对象的时候遇到问题。所以,这里需要用到Unmanaged。

Unmanaged是一个结构体,可以用来获取一个对象的指针,也可以将一个指针转换成一个对象:

// 获取指针
let ptr = UnsafeMutableRawPointer(Unmanaged<A>.passUnretained(a).toOpaque())
//获取对象
let obj = Unmanaged<A>.fromOpaque(ptr).takeUnretainedValue()
上一篇 下一篇

猜你喜欢

热点阅读