我写文章的目的主要是做个记录和锻炼自己的写作能力,能力有限,如果有什么问题,欢迎指正!
在调用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()