【发布时间】:2015-09-07 15:15:32
【问题描述】:
我有一个将回调函数作为参数的 c 函数,我将编写一个 Obj-C 包装器到标准 C API。我想用块替换 C 回调。
让我们想象一个 C API:
void audioStopFunction(void (*callback)(void *), void *udata);
Obj-C 包装器如下所示:
- (void)myAudioStopFunction:(dispatch_block_t)block
{
void *udata = (__bridge void *)block;
audioStopFunction(my_callback, udata);
}
void my_callback(void *udata)
{
dispatch_block_t block = (__bridge_transfer dispatch_block_t)udata;
block();
}
现在,我有一些问题:
-
在
myAudioStopFunction函数中,我是否需要复制如下块:void *udata = (__bridge void *)[块复制];
在
my_callback函数中,我应该使用__bridge而不是__bridge_transfer?还有,我需要在block()之后拨打Block_release吗?- 代码会导致内存泄漏吗?如果是,那么正确的方法是什么?
【问题讨论】:
-
您是否仅从
myAudioStopFunction拨打audioStopFunction?换一种方式问:实现myAudioStopFunction的类是C回调的(单一)所有者吗? -
是的,它是 c 回调的所有者。
myAudioStopFunction在一个类中,这个类是一个singletion类。
标签: objective-c c