一、概述
本篇是 React Native 通信机制详解的第二篇文章,主要介绍 React Native 新架构下的通信机制。如果想要了解旧架构下的通信机制,可以参考上一篇文章。
二、示例
我们仍然从前文末展示的新架构下注册一个原生模块的示例开始。如果你有兴趣自己动手实践下整个过程,可以参考 React Native 的官方文档:
本篇是 React Native 通信机制详解的第二篇文章,主要介绍 React Native 新架构下的通信机制。如果想要了解旧架构下的通信机制,可以参考上一篇文章。
我们仍然从前文末展示的新架构下注册一个原生模块的示例开始。如果你有兴趣自己动手实践下整个过程,可以参考 React Native 的官方文档:
在前文中,我们介绍了 React Native 的新旧两种架构,并在文章末尾介绍了如何在这两种架构中注册和实现一个原生模块。由于篇幅限制,我们并未对其底层原理进行深入介绍。接下来,我们将聚焦于此,深入探讨 React Native 新旧架构下原生模块和 JavaScript 调用的底层实现。
本篇是 React Native 通信机制详解系列的第一篇文章,主要介绍 React Native 旧架构下的通信机制。如果想要了解 React Native 新架构下的通信机制,请点击这里。
React Native 是一个用于构建跨平台移动应用的开源框架,它允许开发者使用 JavaScript 和 React 语法来编写应用,然后将其编译为原生平台的代码,如 iOS 和 Android。随着移动应用复杂度的不断提升,React Native 的架构设计也在不断演进。在 0.68 版本中,React Native 团队引入了全新的架构设计,从根本上解决了旧架构中的性能瓶颈,并带来了诸多创新特性。本文将深入探讨 React Native 新架构的设计理念和实现原理,帮助开发者更好地理解和应用这一重要升级。
在了解了 iOS 异常的分类和捕获原理后,我们继续深入探讨 KSCrash 这个优秀的异常监控框架的实现原理。KSCrash 作为一个功能丰富的异常监控方案,其实现涉及多个复杂的技术模块。本文将重点为你解析 KSCrash 的整体架构,并深入剖析其核心监控系统的实现细节。至于其他功能模块的实现,我们会在后续文章中逐一展开。
KSCrash 的整体架构清晰而模块化,主要包含五个核心部分:
在 iOS 中,异常(Exception)是指程序运行过程中出现的非正常情况,这种情况下应用无法再正常继续执行下去了,也就是我们常说的应用崩了。
异常有好几种,按照从底层到上层的顺序来说的话,依次是:
Mach 异常是由操作系统内核引发的,常见的比如访问了无效内存地址、除零错误等,它是一种底层的异常机制。
BSD Signal 异常是 Mach 异常在 BSD 层的一种表现形式,通常是由 Mach 异常转换而来的,常见的比如SIGSEGV(段错误)、SIGBUS(总线错误)、SIGABRT(异常终止)等。
Gopool 是字节跳动开源项目 gopkg 中的一个小工具,作用是以池化的思想来实现 goroutine 的复用,限制应用中 goutine 数量的无限增长。
Gopool 使用起来非常简单,只需要将项目中的 go 关键字替换为 gopool.Go:
go func() {
// do your job
}()
《Go 语言精进之路》这本书真的非常好,深入讲解了 Go 语言的方方面面,是入门的不二之选。本文是在学习《Go 语言精进之路》时所做的一些摘要和记录。
Go 特点:
在 iOS 应用的 crash 治理过程中,有相当一大部分问题最终的堆栈是在系统库之中的,因此为了解决这些问题,就需要通过逆向手段来分析系统库的内在逻辑,找到 crash 发生的原因。本文介绍如何利用 dyld_shared_cache 和 Hopper 进行分析。
进行逆向分析的第一步,是获取系统库的二进制文件。如果你有一台 iPhone 设备,并且你要分析的 crash 就发生在这个设备或者这个设备对应的系统版本上,那么获取系统库二进制文件就非常简单,只需将设备连接到 Mac 上,然后在 Xcode 中将它选中作为 Build Target,Xcode 就会从 iPhone 中拷贝出所需的文件。
前文分析过 Aspects 实现 AOP 的原理,而由饿了么开源的组件 Stinger同样是一个用于 AOP 的组件,并且饿了么宣称 Stinger 在性能上能够吊打 Aspects,并且给出了测试的数据。那么 Stinger 究竟是如何实现性能的飞跃的呢?让我们一起来探究一下。
EasyTuple是由美团开源的一个第三方库,它给Objective-C 添加了元组的能力,可以将几个对象包裹在一个对象中,这样我们就可以从一个函数中返回多个值。它的使用非常简单,比如我们想创建一个由两个元素组成的元组,那么可以这样写:
EZTuple2<NSNumber *, NSString *> *tuple = EZTuple(@1, @"string");