模块配置表
oc生成一张模块配置表,包含所有模块和模块里的方法,暴露给JS。
模块配置表根据实现接口RCTBridgeModule的类自动生成,主要应用了runtime机制。其中模块中暴露给JS的代码,根据特定的标识宏(RCT_EXPORT_MODULE()),将可以暴露的方法暴露给JS。
相关类:RCTBatchedBridge、RCTBridge、RCTBridge+Private、RCTBridgeModule
调用流程
1.JS端调用某个OC模块暴露出来的方法。
2.把上一步的调用分解为ModuleName,MethodName,arguments,再扔给MessageQueue处理。
3.在这一步把JS的callback函数缓存在MessageQueue的一个成员变量里,用CallbackID代表callback。在通过保存在MessageQueue的模块配置表把上一步传进来的ModuleName和MethodName转为ModuleID和MethodID。
4.把上述步骤得到的ModuleID,MethodId,CallbackID和其他参数argus传给OC
5.OC接收到消息,通过模块配置表拿到对应的模块和方法。
6.RCTModuleMethod对JS传过来的每一个参数进行处理。
7.OC模块方法调用完,执行block回调。
8.调用到第6步说明的RCTModuleMethod生成的block。
9.block里带着CallbackID和block传过来的参数去调JS里MessageQueue的方法invokeCallbackAndReturnFlushedQueue。
10.MessageQueue通过CallbackID找到相应的JS callback方法。
11.调用callback方法,并把OC带过来的参数一起传过去,完成回调。