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