本页面文档介绍了 React Native 的 iOS 特定实现,涵盖了原生 iOS 组件、初始化流程、CocoaPods 集成和组件渲染管道。它详细解释了使 React Native 应用程序能够在 iOS 设备上执行 JavaScript 代码和渲染原生 UI 组件的 iOS 运行时基础设施。
有关 Android 实现的信息,请参阅 Android 实现。
React Native 的 iOS 实现提供了将 JavaScript 代码与原生 iOS API 和组件进行桥接所需的基础设施。它包含几个关键组件:
RCTAppDelegate 和较新的 RCTReactNativeFactoryreact_native_pods.rb 进行依赖管理iOS 实现支持使用 Bridge 的旧版架构以及使用 Fabric 渲染器和 TurboModules 的新版架构。
来源
React Native iOS 应用通过一系列初始化步骤进行引导,通常从 AppDelegate 类开始。
iOS 应用的传统入口点是通过 AppDelegate。在 React Native 应用中,此类负责初始化 React Native 环境。推荐使用提供的 RCTReactNativeFactory,尽管旧版应用可能使用 RCTAppDelegate(现在已弃用)。
初始化过程会根据应用程序是否使用旧版 Bridge 架构或新的无 Bridge 架构而略有不同。
旧有架构:
RCTBridge 实例RCTRootView 作为 React 组件的容器新架构(无 Bridge 模式)
RCTHost 实例RCTFabricSurface 以通过 Fabric 渲染组件来源
RCTRootViewFactory 类负责创建将承载 React Native 内容的根视图。根据架构模式,它会创建:
RCTRootViewRCTFabricSurface,包装在 RCTSurfaceHostingProxyRootView 中来源
React Native 使用 CocoaPods 来管理 iOS 依赖项。这主要由 react_native_pods.rb 脚本处理。
在将 React Native 集成到 iOS 应用中时,会从应用的 Podfile 调用 react_native_pods.rb 中的 use_react_native! 函数来设置所有必需的依赖项。
CocoaPods 集成期间执行的关键功能包括:
React-Core、React-RCTImage 等核心库。来源
CocoaPods 设置会根据是否启用新架构而有所不同。
对于新架构,会应用额外的 Pod 配置:
React-Fabric、React-graphics 等。ReactCommon/turbomodule/core 等。c++20。来源
React Native 在 iOS 上维护一个渲染管道,该管道将 React 组件转换为原生 UIKit 视图。
iOS 渲染管道包括:
来源
RCTComponentViewFactory 负责创建和管理与 React 组件对应的原生 UIKit 视图。
在新架构中,组件通过 RCTComponentViewFactoryComponentProvider 协议进行注册。
来源
React Native iOS 支持两种运行模式:Bridge 模式(旧版)和无 Bridge 模式(新架构)。
在旧版架构中,RCTBridge 类促进了 JavaScript 和原生代码之间的通信。
来源
在新架构中,RCTHost 取代了 Bridge,使用直接的 JavaScript 接口 (JSI) 调用。
来源
React Native iOS 支持两种 JavaScript 引擎:Hermes(默认)和 JavaScriptCore (JSC)。
Hermes 是 React Native 的默认 JavaScript 引擎。集成在 CocoaPods 设置过程中处理。
使用 Hermes 时:
hermes-engine Pod。来源
JavaScript 执行器工厂会为选定的 JavaScript 引擎创建合适的执行器
来源
Fabric 是 React Native 新的渲染系统,可以提高性能并启用新功能。
Fabric 渲染器通过几个关键组件进行集成
来源
Fabric 渲染管线使用 C++ 阴影树来计算布局并生成挂载指令
来源
React Native 的 iOS 实现提供了 JavaScript 与原生 iOS 功能之间的桥梁。它使 React 组件能够渲染为原生 UIKit 视图,提供性能和原生外观。
该系统已发展为支持旧的 Bridge 架构和支持 Fabric 和 TurboModules 的新 Bridgeless 架构。虽然仍支持旧的架构,但开发重点是改进新架构以获得更好的性能和功能。
未来的 iOS 特定增强功能将继续构建在此基础上,并特别关注新架构组件。
来源