reactnative调研
/** | |
* This function parses the exported methods inside RCTBridgeModules and | |
* generates an array of arrays of RCTModuleMethod objects, keyed | |
* by module index. | |
*/ | |
static RCTSparseArray *RCTExportedMethodsByModuleID(void) | |
{ | |
static RCTSparseArray *methodsByModuleID; | |
static dispatch_once_t onceToken; | |
dispatch_once(&onceToken, ^{ | |
Dl_info info; | |
dladdr(&RCTExportedMethodsByModuleID, &info); | |
#ifdef __LP64__ | |
typedef uint64_t RCTExportValue; | |
typedef struct section_64 RCTExportSection; | |
#define RCTGetSectByNameFromHeader getsectbynamefromheader_64 | |
#else | |
typedef uint32_t RCTExportValue; | |
typedef struct section RCTExportSection; | |
#define RCTGetSectByNameFromHeader getsectbynamefromheader | |
#endif | |
const RCTExportValue mach_header = (RCTExportValue)info.dli_fbase; | |
const RCTExportSection *section = RCTGetSectByNameFromHeader((void *)mach_header, "__DATA", "RCTExport"); | |
if (section == NULL) { | |
return; | |
} | |
NSArray *classes = RCTBridgeModuleClassesByModuleID(); | |
NSMutableDictionary *methodsByModuleClassName = [NSMutableDictionary dictionaryWithCapacity:[classes count]]; | |
for (RCTExportValue addr = section->offset; | |
addr < section->offset + section->size; | |
addr += sizeof(const char **) * 2) { | |
// Get data entry | |
const char **entries = (const char **)(mach_header + addr); | |
// Create method | |
RCTModuleMethod *moduleMethod = | |
[[RCTModuleMethod alloc] initWithMethodName:@(entries[0]) | |
JSMethodName:strlen(entries[1]) ? @(entries[1]) : nil]; | |
// Cache method | |
NSArray *methods = methodsByModuleClassName[moduleMethod.moduleClassName]; | |
methodsByModuleClassName[moduleMethod.moduleClassName] = | |
methods ? [methods arrayByAddingObject:moduleMethod] : @[moduleMethod]; | |
} | |
methodsByModuleID = [[RCTSparseArray alloc] initWithCapacity:[classes count]]; | |
[classes enumerateObjectsUsingBlock:^(Class moduleClass, NSUInteger moduleID, BOOL *stop) { | |
methodsByModuleID[moduleID] = methodsByModuleClassName[NSStringFromClass(moduleClass)]; | |
}]; | |
}); | |
return methodsByModuleID; | |
} |
reactnative调研的更多相关文章
- ReactNative调研结果
React Native相关调研总结 一.概要 React Native - 使用React开发世界一流的原生应用: 使用JavaScript和React(对JS有一定扩展)作为开发语言: React ...
- React-Native转小程序调研报告:Taro & Alita
一. 我们的要求 期望的要求 基于React语法,将RN项目转化为小程序项目 该小程序能同时在 微信小程序 和 支付宝小程序这两个平台运行 底线要求 底线是能转成微信小程序,因为目前来说,因为微信先发 ...
- react-native技术调研:react-native是什么?
如有疏漏错误,还望指正.转载不忘加上>>原链接<<哦~ react-native是什么? react-native原理 从字面意思上来看,react-native由单词reac ...
- 在 ReactNative 的 App 中,集成 Bugly 你会遇到的一些坑
一.前言 最近开新项目,准备尝试一下 ReactNative,所以前期做了一些调研工作,ReactNative 的优点非常的明显,可以做到跨平台,除了少部分 UI 效果可能需要对不同的平台进行单独适配 ...
- react-native中使用Echarts,自己使用WebView封装Echarts经验
1.工作中遇到的问题 我们在使用react-native肯定遇到过各种奇葩的问题,比如引入Echarts时候莫名报错,但是Echarts官网明显告诉我们可以懒加载的,这是因为基本上js大部分原生的组件 ...
- React-Native WebView动态加载字体
背景 使用react-native构建的iOS/Android双端APP,通过WebView加载本地页面,需要根据服务器提供的字体列表实现下载和动态加载. 本地字体检查 有些字体手机操作系统已经提供了 ...
- CMS模板应用调研问卷
截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...
- ReactNative入门 —— 动画篇(上)
在不使用任何RN动画相关API的时候,我们会想到一种非常粗暴的方式来实现我们希望的动画效果——通过修改state来不断得改变视图上的样式. 我们来个简单的示例: var AwesomeProject ...
- ReactNative入门(安卓)——API(下)
LayoutAnimation - layout动画 当布局发生改变时的动画模块,它有两个方法: 1. 最常用的方法是 LayoutAnimation.configureNext(conf<Ob ...
随机推荐
- liunx下在线升级python到2.7版本
因开发nodejs中间用到了node-gyp模块,此模块需2.X最新版本,所以升级服务器python版本 亲测成功 python 升级步骤#1.which python 查询python的位置/usr ...
- Codeforces 949E Binary Cards
Description 给出一个长度为 \(n\) 的数组,求使得用最少数量的 \(2^k\) 或 \(-2^k\) 的数,使得数组中的每一个元素都可以被你选出的 \(2\) 的次幂表示 题面 Sol ...
- PHP之数组和函数的基本教程
[PHP数组的分类] 按照下标的不同,PHP数组分为关联数组与索引数组 索引数组:下标从0开始,依次增长: 关联数组:下标为字符串格式,每个下标字符串与数字的值一一关联对应(有点像对象的键值对) [关 ...
- vscode设置中文,设置中文不成功问题
刚安装好的vscode界面显示英文,如何设置中文呢? 在locale.json界面设置”locale":"zh-cn"也未能实现界面为中文,在网上找了参考了,以下教程真实 ...
- jsp servlet基础复习 Part1
jsp和servlet的一些基础知识整理,用于备忘. 一.jsp与servlet的基本关系 1.jsp-->web容器-->servlet-->加载进容器的虚拟机执行-->输出 ...
- java 2018面试题-多线程汇总(含解答)
学习,内容越多.越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的.这篇文章主要是对多线程的问题进行总结的,因此罗列了自己整理的多线程的问题,都是自己觉得比较经典和一些大企业面试会问 ...
- C Primer Plus note5
error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token| 遇到这种情况,不要看这里显示了三个错误,就很着急.静 ...
- 移动端适配(2)——viewport适配
通过viewport来适配 <script> (function(){ var w=window.screen.width; console.log(w);//获取屏幕尺寸 var tar ...
- 排序算法lowb三人组-冒泡排序
冒泡排序:顾名思义就是像气泡从水里浮出来一样 把列表立起来如上图所示,从列表的第0项开始循环(把最大的数想成此次循环的气泡) 要把最大的放到上面那那就用第0项开始一次和剩下的开始比较,只要比第0项小就 ...
- Python-网络编程(三)
今天是网络编程的最后一天,明天会开始并发编程 socketserver模块实现并发 为什么要讲socketserver?我们之前写的tcp协议的socket是不是一次只能和一个客户端通信,如果用soc ...