Obj-C,将对self的引用传递给C函数

时间:2014-06-14 11:17:53

标签: objective-c c

在我的应用程序中,我有一些C代码执行一些低级别的工作,并且需要在发生某个事件时通知Objective-C实例。执行该低级别工作的C函数对上下文带有void *以及指向回调函数的指针。然后工作者调用回调函数并将上下文传递给它。

我想要做的是将对“self”的引用传递给该worker函数,但到目前为止我还没有取得多大成功。

我试过了 哑铸造:(void *) self, 桥接铸造:(__bridge void *)self; / (__bridge_retain void*) selfCFBridgingRelease(self)

但所有这些都会导致我的应用崩溃。

如何将self投射到void*?还有更好的选择吗?

1 个答案:

答案 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;

  /* ... */
}