码迷,mamicode.com
首页 > 移动开发 > 详细

iOS.ReactNative-2-about-bridge

时间:2015-08-21 01:51:21      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

Bridge

Async batched bridge used to communicate with the JavaScript application.

1. 寻找起点-RCTRootView

在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类是可以进行探索其原因的起点。

 

2. RCTBridge

接下来浏览类RCTRootView源码,RCTRootView是UIView的子类,并且很简单。其中有一个属性:

1 @property (nonatomic, strong, readonly) RCTBridge *bridge;

 

通读类RCTBridge的代码,只有很少的200~300行。但是发现类RCTBatchedBridge继承自类RCTBridge。

类RCTBatchedBridge是Bridge模块的一个私有类,只被在类RCTBridge中被使用。这样设计使得接口和繁复的实现

分离。

3. RCTBatchedBridge

观察类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 }

 

 

 

 

 

 

 

 

 

 

 


Reference

1. React-Native: RCTBridge.m/h

 

iOS.ReactNative-2-about-bridge

标签:

原文地址:http://www.cnblogs.com/cwgk/p/4746666.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!