返回

React Native 调用原生方法的幕后机制

IOS

React Native 调用原生(iOS)方法的全过程(二)

RN调用原生方法的简要回顾

在上一篇文章中,我们探讨了 React Native 如何通过RCTBatchedBridge调用原生(iOS)方法的简要过程。让我们快速回顾一下:

  1. RN 将原生方法调用打包到一个队列中。
  2. RCTBatchedBridge将队列中的调用批量发送到原生线程。
  3. 原生线程上的RCTBridge将调用分发给对应的原生模块。

RCTBatchedBridge内部运作机制

RCTBatchedBridge是一个Objective-C类,它负责管理RN与原生线程之间的通信。它使用一个名为queue的调度队列,该队列是一个异步执行任务的串行队列。

当RN调用一个原生方法时,该调用会被添加到queue中。然后,queue会调度一个名为nativeFlushQueueImmediate的函数,该函数将所有挂起的调用批量发送到原生线程。

nativeFlushQueueImmediate函数

nativeFlushQueueImmediate函数是RCTBatchedBridge的关键部分,因为它负责将RN调用分发到原生模块。该函数执行以下步骤:

  1. queue中获取所有挂起的调用。
  2. 创建一个新的RCTResponseSenderBlock,该块负责将原生模块的响应发送回RN线程。
  3. 遍历挂起的调用,并为每个调用创建一个RCTMethodCall对象。
  4. RCTMethodCall对象和RCTResponseSenderBlock一起传递给callFunctionReturnFlushedQueue:方法。

callFunctionReturnFlushedQueue:方法

callFunctionReturnFlushedQueue:方法是RCTBridge上的一个方法,它负责将RCTMethodCall对象分发到正确的原生模块。该方法执行以下步骤:

  1. RCTMethodCall对象中获取模块名称。
  2. 使用模块名称查找相应的原生模块。
  3. 调用原生模块上与RCTMethodCall对象中指定的方法名称相对应的函数。

总结

通过RCTBatchedBridgenativeFlushQueueImmediate函数和callFunctionReturnFlushedQueue:方法的共同作用,React Native 能够将调用有效地分发到原生模块。这种机制确保了RN和原生代码之间的顺畅通信,从而为开发人员提供了一种强大的方式来构建跨平台应用程序。