首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >iPhone -中央调度主线程

iPhone -中央调度主线程
EN

Stack Overflow用户
提问于 2011-10-26 23:42:52
回答 3查看 145.1K关注 0票数 146

我已经在我的应用程序中成功地使用了grand中央调度,但我想知道使用这样的东西的真正优势是什么:

代码语言:javascript
复制
dispatch_async(dispatch_get_main_queue(), ^{ ... do stuff

甚至是

代码语言:javascript
复制
dispatch_sync(dispatch_get_main_queue(), ^{ ... do stuff

我的意思是,在这两种情况下,你都会触发一个在主线程上执行的块,而这恰恰是应用程序运行的地方,这将无助于减少负载。在第一种情况下,您无法控制块何时运行。我见过块在你启动后半秒就被执行的情况。第二种情况类似于

代码语言:javascript
复制
[self doStuff];

对吗?

我想知道你们怎么想的。

EN

回答 3

Stack Overflow用户

发布于 2011-10-27 00:24:43

希望我能正确理解你的问题,因为你想知道dispatch_async和dispatch_sync之间的区别?

代码语言:javascript
复制
dispatch_async

将以异步方式将块调度到队列。这意味着在继续执行方法中的其余代码之前,它会将块发送到队列,而不是等待它返回。

代码语言:javascript
复制
dispatch_sync

将同步地将该块分派到队列。这将阻止方法中剩余代码的任何更多执行,直到块完成执行。

我主要使用后台队列的dispatch_async将工作从主队列中转移出来,并利用设备可能具有的任何额外内核。然后,如果我需要更新UI,则使用dispatch_async连接到主线程。

祝好运

票数 11
EN

Stack Overflow用户

发布于 2014-07-10 10:48:12

它很有用的一个地方是UI活动,比如在冗长的操作之前设置微调器:

代码语言:javascript
复制
- (void) handleDoSomethingButton{

    [mySpinner startAnimating];

    (do something lengthy)
    [mySpinner stopAnimating];
}

将不会工作,因为您在冗长的代码中阻塞了主线程,而不是让UIKit实际启动微调器。

代码语言:javascript
复制
- (void) handleDoSomethingButton{
     [mySpinner startAnimating];

     dispatch_async (dispatch_get_main_queue(), ^{
          (do something lengthy)
          [mySpinner stopAnimating];
    });
}

将控制权返回给run循环,该循环将调度UI更新,启动微调器,然后从分派队列中获取下一项内容,即实际处理。处理完成后,将调用动画stop,并返回到run循环,然后使用stop更新UI。

票数 9
EN

Stack Overflow用户

发布于 2015-12-06 11:44:54

Async意味着异步,您应该在大多数时间使用它。你不应该在主线程上调用sync,因为它会锁定你的UI,直到任务完成。以下是在Swift中执行此操作的更好方法:

代码语言:javascript
复制
runThisInMainThread { () -> Void in
    // Run your code like this:
    self.doStuff()
}

func runThisInMainThread(block: dispatch_block_t) {
    dispatch_async(dispatch_get_main_queue(), block)
}

它作为一个标准函数包含在我的存储库中,请查看它:https://github.com/goktugyil/EZSwiftExtensions

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7905192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档