美文网首页
dispatch_async 使用

dispatch_async 使用

作者: leafu | 来源:发表于2022-04-20 11:13 被阅读0次

dispatch_async在项目中经常使用到,用于做异步函数处理,函数如下:

dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

dispatch_queue_t参数,这个参数决定异步执行在哪个线程执行;
创建方法有:

   dispatch_queue_t queue_t = dispatch_queue_create("XueXiGCD", DISPATCH_QUEUE_CONCURRENT);
   dispatch_async( queue_t, ^{
            NSLog(@"在这里进行处理");
        });

或者直接传入主线程

   dispatch_async( dispatch_get_main_queue(), ^{
            NSLog(@"在这里进行处理,界面都要回到主线程处理,不然会出现线程问题");
        });

dispatch_queue_t线程创建方式
1、dispatch_queue_create(const char *_Nullable label,dispatch_queue_attr_t _Nullable attr);

dispatch_queue_attr_t 参数:
1.1 DISPATCH_QUEUE_SERIAL串行执行
1.2、DISPATCH_QUEUE_CONCURRENT并发执行

2、dispatch_get_global_queue(intptr_t identifier, uintptr_t flags);创建全局队列,并发执行

identifier定义:
 DISPATCH_QUEUE_PRIORITY_HIGH:         QOS_CLASS_USER_INITIATED
 DISPATCH_QUEUE_PRIORITY_DEFAULT:      QOS_CLASS_DEFAULT
 DISPATCH_QUEUE_PRIORITY_LOW:          QOS_CLASS_UTILITY
 DISPATCH_QUEUE_PRIORITY_BACKGROUND:   QOS_CLASS_BACKGROUND

下面是创建一个串行队列:


截屏2022-04-20 10.37.19.png

可以看到打印输出的结果,是依次执行打印,下面是并发执行:


截屏2022-04-20 10.40.29.png
对比结果,打印出来的顺序并没有按照先后顺序执行的。下面是创建一个全局队列:
截屏2022-04-20 11.26.38.png

相关文章

网友评论

      本文标题:dispatch_async 使用

      本文链接:https://www.haomeiwen.com/subject/fnfvertx.html