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 ...
随机推荐
- Iterator和for...of循环
Iterator和for...of循环 Iterator(遍历器)的概念 数据结构的默认Iterator接口 调用Iterator接口的场合 字符串的Iterator接口 Iterator接口与Gen ...
- [转]what’s the difference between @Component ,@Repository & @Service annotations in Spring
原文地址:https://www.cnblogs.com/softidea/p/6070314.html @Component is equivalent to <bean> @Servi ...
- mybatis学习之高级映射
一对一映射查询 1.数据库执行脚本: /* SQLyog Ultimate v12.09 (64 bit) MySQL - 5.7.11-log : Database - db_mybatis *** ...
- js密码强度校验
function AuthPasswd(string) { if(!string){ jQuery("#low").removeClass("org"); }) ...
- json数据发送时浏览器提示“保存”解决
数据以json形式发送的时候,部分浏览器不能直接解析,而是提示是否保存,nodejs的express应用中可以通过如下代码解决该问题: router.get('/', function (req, r ...
- type=file的change事件只能执行一次的解决方案
最近帮朋友做个项目中遇到了type=file change事件只能执行一次的问题,度娘了一下,发现提供了各种解决方案,所以决定记录一下我的思考方向和最终解决方式. 起初帮朋友做个项目,项目中遇到上传文 ...
- 缓存与DB数据一致性问题解决的几个思路
使用缓存必然会碰到缓存跟真实数据不一致的问题,虽然我们会在数据发生变化时通知缓存,但是这个延迟时间内必然会导致数据不一致,如何解决一般有下面几个思路: 首先,当这个延迟如果在业务上时可以接受的,比如文 ...
- [C]逗号运算符
https://baike.baidu.com/item/%E9%80%97%E5%8F%B7%E8%BF%90%E7%AE%97%E7%AC%A6/7959271?fr=aladdin
- 从Pc转向H5开发遇到的适配问题思考
1.首先说滚动条 移动端开发在不设置任何适配和viewport宽度的情况下,以iphone5为例:屏幕界面的逻辑分辨率是320x568,在谷歌浏览器的界面下屏幕的可视宽度是980px(谷歌设置的,每个 ...
- C#虚基类继承与接口的区别
类:定义新的数据类型以及这些新的数据类型进行相互操作的方法 定义方式: class Cat { } class Cat:object { } C#中所有的类都是默认由object类派生来的,显示指定或 ...