差异需要MainQueueSetup和dispatch_get_main_queue?

我正在尝试学习如何为iOS创建react-native模块,并且有一个方面出现了

有关线程的官方文档提及此代码块及其变体

- (dispatch_queue_t)methodQueue { return dispatch_get_main_queue(); } 

我在第三方图书馆看到的另一个无证的和平就是这个

 + (BOOL)requiresMainQueueSetup { return NO; } 

对我来说,这些看起来有点类似但不同,因此我想要求对以下问题进行解释

  1. 什么时候应该dispatch_get_main_queue添加到模块中,如果省略它会发生什么?

  2. 什么时候应该requiresMainQueueSetup将MainQueueSetup添加到模块中,如果省略它会发生什么?

  3. 可以dispatch_get_main_queuerequiresMainQueueSetup一起使用,如果是这样,为什么以及何时?

  4. requiresMainQueueSetup返回YESNO什么区别?

  1. 每当您处理将影响主线程的辅助线程上的事件时,您需要dispatch_get_main_queue()。 通常,这涉及UI更改。 如果要创建不涉及本机呈现的react-native模块,则可能不需要主队列。 应该在辅助线程上调用异步内容,这是您实现dispatch_get_main_queue()以确保在异步操作完成时UI更新的位置。

  2. 几周前我在SO上问了同样的问题没有成功,经过一些研究我现在知道这与子弹号1有关.React-native希望你实现这个方法(与iOS没有任何关系),以及你需要返回YES才能进行本机iOS渲染。 这将确保您的本机模块在主线程上运行,这在UI交互的情况下是相关的。 您不希望应用程序在重负载处理时冻结您的UI。

  3. 如果你没有提供requiresMainQueueSetup(),react-native会在你的脸上发出警告,但此时会将它设置为YES。 此默认值将在即将发布的版本中更改为NO。 所以回答你的问题:它们可以一起使用,但不是每个组合都有意义。 同样在这种情况下,如果您不创建新的本机iOS UI组件,则可能不需要通过dispatch_get_main_queue()访问主线程。 react-native桥将确保始终从iOS到JS传递本机事件和方法,反之亦然,无论它们在哪个线程上运行。

  4. 这已在之前的子弹中得到解决

编辑:一些额外的信息只是为了确保一切都清楚。 总结一下:requiresMainQueueSetup()与iOS无关,只能通过react-native创建,以了解您的本机模块的意图(UI或其他)。 dispatch_get_main_queue()与react-native无关,仅与您的本机代码相关。 它基本上是辅助线程的回调,以通知主线程一些异步操作已完成。