标签:
Async batched bridge used to communicate with the JavaScript application.
在React-Native Based的工程中, 我们看到在AppDelegate.m文件中有以下代码:
1 RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation 2 moduleName:@"AwesomeProject" 3 launchOptions:launchOptions]; 4 5 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 6 UIViewController *rootViewController = [[UIViewController alloc] init]; 7 rootViewController.view = rootView;
之所以可以使用JS来进行iOS App开发,RCTRootView类是可以进行探索其原因的起点。
接下来浏览类RCTRootView源码,RCTRootView是UIView的子类,并且很简单。其中有一个属性:
1 @property (nonatomic, strong, readonly) RCTBridge *bridge;
通读类RCTBridge的代码,只有很少的200~300行。但是发现类RCTBatchedBridge继承自类RCTBridge。
类RCTBatchedBridge是Bridge模块的一个私有类,只被在类RCTBridge中被使用。这样设计使得接口和繁复的实现
分离。
观察类RCTBatchedBridge的initiailizer,发现对接口的‘initJS‘的调用。在这里终于和JS‘发生关系‘。
1 - (instancetype)initWithParentBridge:(RCTBridge *)bridge 2 { 3 // 省略多行代码 4 // ...... 5 // ...... 6 7 /** 8 * Start the application script 9 */ 10 [self initJS]; 11 } 12 return self; 13 }
1. React-Native: RCTBridge.m/h
iOS.ReactNative-2-about-bridge
标签:
原文地址:http://www.cnblogs.com/cwgk/p/4746666.html