React Native一般情况下有两种运行方式:
1、远程模式
2、真机或者模拟器
React Native对不同运行模式提供了不同的JSExecutor来执行JS代码。
Platform: IOS
React Native: 0.47.2
React: 16.0.0-alpha.12
JSExecutorFactory
抽象工厂类。
JSCExecutorFactory
具体工厂类,负责创建JSCExecutor,c++实现。
头文件:cxxreact/JSCExecutor.h
源文件:cxxreact/JSCExecutor.app
RCTObjcExecutorFactory
具体工厂类,负责创建RCTObjcExecutor,objc实现。
头文件: cxxBridge/RCTObjcExecutor.h
源文件:cxxBridge/RCTObjcExecutor.mm
JSExecutorFactory类关系图如下:

JSExecutor
执行JS代码的抽象类。
JSCExecutor
真机或者模拟器模式下执行JS代码的JSExecutor实现。
RCTObjcExecutor
远程模式下执行JS代码的JSExecutor实现。
RCTJavaScriptExecutor
RCTJavaScriptExecutor是一个抽象JavaScript Execution Context协议,主要有两个实现:
1、RCTWebSocketExecutor
2、RCTJSCExecutor,这个似乎已经废弃,找不到调用了
RCTObjcExecutor内部引用了一个RCTJavaScriptExecutor协议句柄,该句柄代理了RCTObjcExecutor所有对JS的调用。
JSExecutor类关系图如下:

小结
整个抽象工厂模式类关系图如下:

JSCExecutorFactory具体工厂负责创建JSCExecutor,默认情况下采用JSCExecutor实例来执行JS代码。
RCTObjcExecutorFactory具体工厂负责创建RCTObjcExecutor,远程模式下,由RCTObjcExecutor实例中的RCTWebSocketExecutor实例来执行JS代码。
网友评论