返回
React Native 调用原生方法的幕后机制
IOS
2023-10-29 22:38:42
React Native 调用原生(iOS)方法的全过程(二)
RN调用原生方法的简要回顾
在上一篇文章中,我们探讨了 React Native 如何通过RCTBatchedBridge
调用原生(iOS)方法的简要过程。让我们快速回顾一下:
- RN 将原生方法调用打包到一个队列中。
RCTBatchedBridge
将队列中的调用批量发送到原生线程。- 原生线程上的
RCTBridge
将调用分发给对应的原生模块。
RCTBatchedBridge
内部运作机制
RCTBatchedBridge
是一个Objective-C类,它负责管理RN与原生线程之间的通信。它使用一个名为queue
的调度队列,该队列是一个异步执行任务的串行队列。
当RN调用一个原生方法时,该调用会被添加到queue
中。然后,queue
会调度一个名为nativeFlushQueueImmediate
的函数,该函数将所有挂起的调用批量发送到原生线程。
nativeFlushQueueImmediate
函数
nativeFlushQueueImmediate
函数是RCTBatchedBridge
的关键部分,因为它负责将RN调用分发到原生模块。该函数执行以下步骤:
- 从
queue
中获取所有挂起的调用。 - 创建一个新的
RCTResponseSenderBlock
,该块负责将原生模块的响应发送回RN线程。 - 遍历挂起的调用,并为每个调用创建一个
RCTMethodCall
对象。 - 将
RCTMethodCall
对象和RCTResponseSenderBlock
一起传递给callFunctionReturnFlushedQueue:
方法。
callFunctionReturnFlushedQueue:
方法
callFunctionReturnFlushedQueue:
方法是RCTBridge
上的一个方法,它负责将RCTMethodCall
对象分发到正确的原生模块。该方法执行以下步骤:
- 从
RCTMethodCall
对象中获取模块名称。 - 使用模块名称查找相应的原生模块。
- 调用原生模块上与
RCTMethodCall
对象中指定的方法名称相对应的函数。
总结
通过RCTBatchedBridge
、nativeFlushQueueImmediate
函数和callFunctionReturnFlushedQueue:
方法的共同作用,React Native 能够将调用有效地分发到原生模块。这种机制确保了RN和原生代码之间的顺畅通信,从而为开发人员提供了一种强大的方式来构建跨平台应用程序。