延迟执行
//第一个参数:dispatch_time_t when 时间
//第二个参数:dispatch_queue_t queue 队列
//第三个参数:dispatch_block_t block 执行的block
//这段代码的含义为:让主队列延迟两秒打印LitterL
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"LitterL");
});
一次性执行
//第一个参数:dispatch_once_t *predicate 记录代码是否被执行过 默认为0 但执行一次后就是-1了 所以就看到智能执行一次的这个效果
//第二个参数:dispatch_block_t block 执行的block
_dispatch_once(dispatch_once_t *predicate, dispatch_block_t block)
{
if (DISPATCH_EXPECT(*predicate, ~0l) != ~0l) {
dispatch_once(predicate, block);
}
}
//-------------------实例---------------------
-(void)once
{
//整个程序运行过程中只会执行一次
//onceToken用来记录该部分的代码是否被执行过
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"LitterL");
});
}
栅栏函数(控制任务的执行顺序)
//栅栏函数
//第一个参数 dispatch_queue_t 队列
//第二个参数 dispatch_block_t 执行的block
//作用:在我们需要控制任务的顺序的时候可以使用栅栏函数,进行控制
dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
//-------------------------实例---------------------------
//
// 不管怎么输出,我的1-X、2-X都是在上面,而不是随意乱输出
//
-(void)barrier
{
//1.获得队列
dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_CONCURRENT);
//2.异步函数
dispatch_async(queue, ^{
for (NSInteger i =0; i<10; i++) {
NSLog(@"1-%zd--%@",i,[NSThread currentThread]);
}
});
dispatch_async(queue, ^{
for (NSInteger i =0; i<10; i++) {
NSLog(@"2-%zd--%@",i,[NSThread currentThread]);
}
});
//栅栏函数:控制并发队列中任务的执行顺序
dispatch_barrier_async(queue, ^{
NSLog(@"+++++++++++++++++++++++++++");
});
dispatch_async(queue, ^{
for (NSInteger i =0; i<10; i++) {
NSLog(@"3-%zd--%@",i,[NSThread currentThread]);
}
});
dispatch_async(queue, ^{
for (NSInteger i =0; i<10; i++) {
NSLog(@"4-%zd--%@",i,[NSThread currentThread]);
}
});
}
快速迭代
-(void)test
{
//1.获得并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//2.快速迭代
/*
第一个参数:要迭代的次数
第二个参数:队列,并发队列
第三个参数:block 封装任务
*/
dispatch_apply(10, queue, ^(size_t index) {
NSLog(@"%zd----%@",index,[NSThread currentThread]);
});
}
队列组
-(void)group
{
//0.创建队列组
dispatch_group_t group = dispatch_group_create();
//1.创建队列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
//2.异步函数
/*
1)封装任务
2)把任务添加到队列中
3)监听任务的执行情况,group
*/
dispatch_group_async(group, queue, ^{
NSLog(@"download1---%@",[NSThread currentThread]);
});
dispatch_group_async(group, queue, ^{
NSLog(@"download2---%@",[NSThread currentThread]);
});
dispatch_group_async(group, queue, ^{
NSLog(@"download3---%@",[NSThread currentThread]);
});
//3.当队列组中所有的任务都执行完毕之后会通知group执行dispatch_group_notify方法
dispatch_group_notify(group, queue, ^{
NSLog(@"队列组中所有的任务都执行完毕了");
});
}
结束
本章到此结束
欢迎各位码友随意转载并指正