在Objective-C类中混合C函数

我正在编写一个Objective-C类,但是它使用用C编写的API。这很好,因为将C调用与Objective-C调用混合使用不会引起什么问题。


但是,API调用之一需要回调方法(示例):


success = CFHostSetClient(host, MyCFHostClientCallBack, &context);

MyCFHostClientCallBackC函数定义在哪里:


static void MyCFHostClientCallBack(CFHostRef host, CFHostInfoType typeInfo, const CFStreamError *error, void *info);

我可以/如何调用Objective-C方法代替它?

我可以/应该将C函数与我的Objective-C调用混合使用吗?

如何将C函数与Objective-C方法混合使用?


潇潇雨雨
浏览 608回答 3
3回答

三国纷争

要从C回调调用Objective-C代码,我将使用类似以下内容的代码:void * refToSelf;int cCallback(){    [refToSelf someMethod:someArg];}@implementation SomeClass- (id) init{     self = [super init];     refToSelf = self;}- (void) someMethod:(int) someArg{}

胡子哥哥

我可以/如何调用Objective-C方法代替它?你不能。可以/应该在我的Objective-C调用中混用C函数吗?是。编写一个C函数,并将其用作CF函数的回调。如何将C函数与Objective-C方法混合使用?您可以将其设置self为info上下文结构中的指针。这将传递给回调。然后,在回调中,将info指针转换回id:MyClass *self = (id)info;然后,您可以发送self消息。但是,由于C函数在该@implementation部分之外,因此您仍然不能直接访问实例变量。您必须将它们设置为属性。您可以使用类扩展来做到这一点。(与该文档相反,您不会在内声明扩展名@implementation,而是在与扩展名相同的文件中声明该扩展名,通常在其上方。)
打开App,查看更多内容
随时随地看视频慕课网APP