私はいくつかのUIView
またはUITableViewCell
を持っています。他Swift Cコールバック - SwiftクラスのポインタのtakeUnretainedValueまたはtakeRetainedValue
CCallback(bridge(self),
{(observer, data) -> Void in
let mySelf = Unmanaged<DetailedView>.fromOpaque(observer!).takeRetainedValue()
mySelf.fillLoadedData(data: data)
});
どこかCで
func bridge<T : AnyObject>(_ obj : T) -> UnsafeMutableRawPointer {
return UnsafeMutableRawPointer(Unmanaged.passUnretained(obj).toOpaque())
}
:
void CCalback(void * classPtr, void(*callback)(void *, MyData)){
//fill data
callback(classPtr, data)
}
は、私が閉鎖にtakeUnretainedValue
またはtakeRetainedValue
を使用すべき、私は例えばCコールバックを、持っている内部の?私がこれを理解する限り、オブジェクトの参照カウントを増加させるので、自動破壊されません。そうでない場合、私がtakeUnretainedValue
を使用すると、自己が自動リリースされた場合、これはクラッシュするので、takeRetainedValue
を使用すると、それが防止されます。私は正しいですか?
「ブリッジ(自己)」とは何ですか? –
@MartinRコードが追加されました –