gpt4 book ai didi

ios - iPhone - Grand Central Dispatch 主线程

转载 作者:IT王子 更新时间:2023-10-29 07:26:59 25 4
gpt4 key购买 nike

我一直在我的应用程序中成功使用 grand central dispatch,但我想知道使用这样的东西的真正优势是什么:

dispatch_async(dispatch_get_main_queue(), ^{ ... do stuff

甚至

dispatch_sync(dispatch_get_main_queue(), ^{ ... do stuff

我的意思是,在这两种情况下,您都在触发一个要在主线程上执行的 block ,也就是应用程序运行的位置,这无助于减少负载。在第一种情况下,您无法控制 block 何时运行。我见过在你发射它们后半秒执行 block 的情况。第二种情况,类似于

[self doStuff];

对吗?

不知道大家怎么看

最佳答案

将 block 分派(dispatch)到主队列通常是从后台队列完成的,以发出某些后台处理已完成的信号,例如

- (void)doCalculation
{
//you can use any string instead "com.mycompany.myqueue"
dispatch_queue_t backgroundQueue = dispatch_queue_create("com.mycompany.myqueue", 0);

dispatch_async(backgroundQueue, ^{
int result = <some really long calculation that takes seconds to complete>;

dispatch_async(dispatch_get_main_queue(), ^{
[self updateMyUIWithResult:result];
});
});
}

在这种情况下,我们正在对后台队列进行冗长的计算,并且需要在计算完成后更新我们的 UI。更新 UI 通常必须从主队列完成,因此我们使用第二个嵌套的 dispatch_async 向主队列“发信号”。

可能还有其他示例,您可能希望分派(dispatch)回主队列,但通常以这种方式完成,即从分派(dispatch)到后台队列的 block 中嵌套。

  • 后台处理完成->更新UI
  • 在后台队列上处理的数据 block -> 通知主队列开始下一个 block
  • 后台队列上的传入网络数据 -> 向主队列发出消息已到达的信号
  • 等等等等

至于为什么你可能想要从主队列 调度到主队列......好吧,你通常不会,尽管可以想象你可能会安排一些工作来做下一个运行循环的时间。

关于ios - iPhone - Grand Central Dispatch 主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7905192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com