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

What is the difference between perform a method directly and in the block of dispatch_async(dispatch_get_main_queue(), ^{})

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

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 的结果,那么您可以进行异步调用。