在我的应用程序中,我有一些C代码执行一些低级别的工作,并且需要在发生某个事件时通知Objective-C实例。执行该低级别工作的C函数对上下文带有void *以及指向回调函数的指针。然后工作者调用回调函数并将上下文传递给它。
我想要做的是将对“self”的引用传递给该worker函数,但到目前为止我还没有取得多大成功。
我试过了
哑铸造:(void *) self
,
桥接铸造:(__bridge void *)self; / (__bridge_retain void*) self
,CFBridgingRelease(self)
但所有这些都会导致我的应用崩溃。
如何将self
投射到void*
?还有更好的选择吗?
答案 0 :(得分:0)
基本上没有所有权转让的bridged cast就足够了:
@implementation Foo
- (void)bar
{
void *ctx = (__bridge void *) self;
dosmthg(callback, ctx);
}
@end
static void
callback(void *ctx)
{
Foo *foo = (__bridge Foo *) ctx;
/* ... */
}