Ilj*_*lja 11 queue multithreading ios react-native
我正在尝试学习如何为iOS创建react-native模块,并且有一个方面出现了
有关线程的官方文档提及此代码块及其变体
- (dispatch_queue_t)methodQueue
{
return dispatch_get_main_queue();
}
Run Code Online (Sandbox Code Playgroud)
我在第三方图书馆看到了另一个无证件的和平
+ (BOOL)requiresMainQueueSetup
{
return NO;
}
Run Code Online (Sandbox Code Playgroud)
对我来说,这些看起来有点类似但不同,因此我想要求对以下问题进行解释
什么时候应该dispatch_get_main_queue添加到模块中,如果省略它会发生什么?
什么时候应该requiresMainQueueSetup添加到模块中,如果省略它会发生什么?
可以dispatch_get_main_queue和requiresMainQueueSetup可以一起使用,如果是这样的话何时何地?
是什么返回之间的差异YES和NO距离requiresMainQueueSetup?
den*_*emm 18
dispatch_get_main_queue()无论何时处理将影响主线程的辅助线程上的事件,您都需要.通常,这涉及UI更改.如果要创建不涉及本机呈现的react-native模块,则可能不需要主队列.应该在辅助线程上调用异步内容,这是您要实现的地方dispatch_get_main_queue(),以确保在异步操作完成时UI得到更新.
几周前我在SO上问了同样的问题没有成功,经过一些研究我现在知道这与子弹号1有关.React-native希望你实现这个方法(与iOS没有任何关系),以及你需要返回YES才能进行原生iOS渲染.这将确保您的本机模块在主线程上运行,这在UI交互的情况下是相关的.您不希望应用程序在重负载处理时冻结您的UI.
如果你没有提供requiresMainQueueSetup()react-native会在你的脸上发出警告,但此时会将其设置为YES.此默认值将在即将发布的版本中更改为NO.所以回答你的问题:它们可以一起使用,但不是每种组合都有意义.同样在这种情况下,如果您没有创建新的本机iOS UI组件,则可能不需要访问主线程dispatch_get_main_queue().react-native桥将确保始终从iOS到JS传递本机事件和方法,反之亦然,无论它们运行在哪个线程上.
这已在之前的子弹中得到解决
编辑:一些额外的信息只是为了确保一切都清楚.总结一下:requiresMainQueueSetup()与iOS无关,只能通过react-native创建,以了解您的本机模块的意图(UI或其他).dispatch_get_main_queue()与react-native无关,仅与您的本机代码相关.它基本上是辅助线程的回调,以通知主线程一些异步操作已完成.
| 归档时间: |
|
| 查看次数: |
2652 次 |
| 最近记录: |