所以我试图调用一个具有回调代码块作为参数的Objective-C方法。
Objective-C 方法(为了发布的目的而削减实现)
- (void)requestWithCompletionHandler:(void(^)(BOOL, NSArray*))completionHandler {
// Implementation ...
completionHandler(YES, NSArray...);
}
C 代码(rsc保存已分配和启动的类)
void callback(id self, SEL _cmd, BOOL success, CFArrayRef array)
{
printf("BOOM\n");
}
objc_msgSend(rsc, sel_getUid("requestWithCompletionHandler:"), (IMP)callback);
来自 Apple 文档
id objc_msgSend(id theReceiver, SEL theSelector, ...)
还...
Objective-C 方法只是一个 C 函数,它至少有两个参数——self 和 _cmd。例如,给定以下函数:
void myMethodIMP(id self, SEL _cmd)
{
// implementation ....
}
您可以将其作为方法(称为 resolveThisMethodDynamically)动态添加到类中,如下所示:
class_addMethod([self class], @selector(resolveThisMethodDynamically), (IMP) myMethodIMP, "v@:");
但是,运行时我得到一个EXC_BAD_ACCESS。