快速提问。有谁知道如何获取 objective-c 方法的函数指针?
我可以将C++方法声明为函数指针,但这是一种回调方法,因此C++方法将需要成为类的一部分,以便可以访问实例字段。我不知道如何使C++方法成为 objective-c 类的一部分。有什么建议么?
最佳答案
通常,您需要两条信息才能回调到Objective-C。要调用的方法以及要对其进行调用的对象。无论是选择器还是IMP(即instanceMethodForSelector:
结果)都将不足以提供足够的信息。
大多数回调API提供了上下文指针,该上下文指针被视为传递给回调的不透明值。这是您难题的关键。
即如果您有一个声明为的回调函数:
typedef void (*CallBackFuncType)(int something, char *else, void *context);
还有一些使用上述回调函数类型的指针的API:
void APIThatWillCallBack(int f1, int f2, CallBackFuncType callback, void *context);
然后,您将实现以下回调:
void MyCallbackDude(int a, char *b, void *context) {
[((MyCallbackObjectClass*)context) myMethodThatTakesSomething: a else: b];
}
然后,您将调用类似于以下内容的API:
MyCallbackObjectClass *callbackContext = [MyCallbackObjectClass new];
APIThatWillCallBack(17, 42, MyCallbackDude, (void*)callbackContext);
如果您需要在不同的选择器之间进行切换,我建议创建一个位于回调和Objective-C API之间的小胶水类。胶水类的实例可以包含必要的配置或逻辑,以便根据传入的回调数据在选择器之间进行切换。
关于c++ - objective-c 中的功能指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1777486/