OGeek|极客世界-中国程序员成长平台

标题: ios - 大中央调度嵌套 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 10:15
标题: ios - 大中央调度嵌套

我在调度异步 block 中编写了一段代码。如下:

dispatch_queue_t queue= dispatch_queue_create("action1", NULL);

dispatch_async(queue, ^{           
   [self method1];            
   [self method2];        
   [self method3];

   dispatch_async(dispatch_get_main_queue(), ^{
       //Update UI
   });       
});

现在,如果我想在主线程上执行 method3 怎么办?只需使用

- (void) method3
{
    dispatch_async(dispatch_get_main_queue(), ^{
        //Do method 3 on main thread
    });
}

这是正确的方法吗?我只希望在我的 UI 更新之前先执行方法 1 2 和 3,并且需要在主线程上执行方法 3。



Best Answer-推荐答案


是的,这很好。诚然,让方法 3 向主队列分派(dispatch)一些东西感觉是多余的,只是让调用第三种方法的例程然后转身向主队列分派(dispatch)其他东西。这可能没问题(我可以构建精确地做到这一点合乎逻辑的场景)。向主线程分派(dispatch)两次是否有意义完全取决于这两个 block 正在执行什么,但如果没有一点上下文,感觉有点多余。

但撇开这一点不谈,创建队列、向其分派(dispatch)代码、然后将最后一部分代码分派(dispatch)回主线程的代码并没有错。这是一种非常常见的模式。

关于ios - 大中央调度嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28298305/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4