我发现在某些情况下,我直接执行 [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/