だから私は引数としてコールバックコードブロックを持つ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メソッドは、selfと_cmdの少なくとも2つの引数を取る単純なC関数です。たとえば、次の関数があるとします。
void myMethodIMP(id self, SEL _cmd)
{
// implementation ....
}
次のように、メソッド(resolveThisMethodDynamicallyと呼ばれる)としてクラスに動的に追加できます。
class_addMethod([self class], @selector(resolveThisMethodDynamically), (IMP) myMethodIMP, "v@:");
ただし、実行するとEXC_BAD_ACCESSが取得されます。