我正在编写一个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方法混合使用?
3 回答
![?](http://img1.sycdn.imooc.com/545869510001a20b02200220-100-100.jpg)
三国纷争
TA贡献1804条经验 获得超7个赞
要从C回调调用Objective-C代码,我将使用类似以下内容的代码:
void * refToSelf;
int cCallback()
{
[refToSelf someMethod:someArg];
}
@implementation SomeClass
- (id) init
{
self = [super init];
refToSelf = self;
}
- (void) someMethod:(int) someArg
{
}
![?](http://img1.sycdn.imooc.com/54584f8f00019fc002200220-100-100.jpg)
胡子哥哥
TA贡献1825条经验 获得超6个赞
我可以/如何调用Objective-C方法代替它?
你不能。
可以/应该在我的Objective-C调用中混用C函数吗?
是。编写一个C函数,并将其用作CF函数的回调。
如何将C函数与Objective-C方法混合使用?
您可以将其设置self为info上下文结构中的指针。这将传递给回调。然后,在回调中,将info指针转换回id:
MyClass *self = (id)info;
然后,您可以发送self消息。但是,由于C函数在该@implementation部分之外,因此您仍然不能直接访问实例变量。您必须将它们设置为属性。您可以使用类扩展来做到这一点。(与该文档相反,您不会在内声明扩展名@implementation,而是在与扩展名相同的文件中声明该扩展名,通常在其上方。)
- 3 回答
- 0 关注
- 658 浏览
添加回答
举报
0/150
提交
取消