我正在编写一个使用 C 库的 Objective-C 应用程序。我目前面临的问题是,C 库有一个结构,其中某些字段是函数指针,稍后用作回调。如何将 Objective-C 实例方法转换为函数指针并将其传递给库?
您需要在 Objective-C 类实现文件中提供 C 回调函数,并且只有当回调能够使用context某种指针。
所以想象一下 C 回调签名是这样的:
void myCallback(void *context, int someOtherInfo);
然后在 Objective-C 类实现文件中,您需要使用该回调来蹦床回到您的 Objective-C 类(使用context指针作为要调用的类的实例):
// Forward declaration of C callback function
static void theCallbackFunction(void *context, int someOtherInfo);
// Private Methods
@interface MyClass ()
- (void)_callbackWithInfo:(int)someOtherInfo;
@end
@implementation MyClass
- (void)methodToSetupCallback
{
// Call function to set the callback function, passing it a "context"
setCallbackFunction(theCallbackFunction, self);
...
}
- (void)_callbackWithInfo:(int)someOtherInfo
{
NSLog(@"Some info: %d", someOtherInfo);
}
@end
static void theCallbackFunction(void *context, int someOtherInfo)
{
MyClass *object = (MyClass *)context;
[object _callbackWithInfo:someOtherInfo];
}
如果你的 C 回调函数不接受某种context信息,那么:
- 它已损坏,应该修复/报告为错误。
- 您将需要依赖存储指向自身的指针在 C 回调函数使用的全局、静态范围内。这将限制实例的数量
MyClass
to one!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)