ios - 直接执行方法和在 dispatch_async(dispatch_get_main_queue(), ^{}) block 中执行方法有什么区别

标签 ios multithreading block grand-central-dispatch dispatch-async

我发现在某些情况下,我直接执行 [self doSomething] 的结果与我在 GCD 主体 block 中执行的结果不同,如下所示:

dispatch_async(dispatch_get_main_queue(), ^{

    [self doSomething]

}) 

我已经执行 [NSThread currentThread] 以确认它已经在主线程上。那么区别是什么呢?

最佳答案

仅限 [self doSomething]将同步调用并使用dispatch_async将被异步调用。

Statement A
[self doSomething]
Statement B

以上代码将开始执行语句A,完成Statement A , 开始执行函数doSomething , 完成函数 doSomething然后开始执行并完成Statement B .
Statement A
dispatch_async(dispatch_get_main_queue(), ^{
    [self doSomething]
})
Statement B

上面的代码块将开始和结束 Statement A 的执行。 ,然后添加 doSomething队列中的函数调用(它可能立即启动也可能不会立即启动)然后它将开始执行Statement B无需等待完成函数的执行doSomething .

所以,如果 Statement B (以及函数调用之后的其他语句)独立于函数的结果 doSomething ,然后您可以进行异步调用。

关于ios - 直接执行方法和在 dispatch_async(dispatch_get_main_queue(), ^{}) block 中执行方法有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37632292/

相关文章:

ios - 创建跨类的全局对象

ios - 如何以编程方式添加 NSLayoutConstraints

java - 预增量运算符是线程安全的吗?

ios - 如何关闭自己的 View Controller 并在点击按钮时显示另一个 View Controller ?

vim - 在文件中逐 block 更改文件类型(或其他 Vim 设置)?

iphone - 在 scrollView 内的 ImageView 中裁剪缩放图像

ios - 为什么在使用 Storyboard时会反复调用 AwakeFromNib?

c# - 如何使用多线程读出ListView

安卓 : Make 2 services communicate

html - 悬停时不显示 css 无法正常工作