dispatch_apply的用法
Posted wjwdive
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dispatch_apply的用法相关的知识,希望对你有一定的参考价值。
dispatch_apply的用法
并行模拟for循环,将指定的代码循环10次,一般会把这些代码附加到一个queue上,然后在 dispatch_apply里并行
dispatch_queue_t queue = dispatch_get_globel_queue(DISPATCH_QUEUE_PREORITY_DEFAULT,0)
dispatch_apply(10, queue, ^(size_t index){
NSLog("并行执行--%@",index);
});
dispatch_apply_f的用法
dispatch_apply 和 dispatch_apply_f 是同步函数,会阻塞当前线程直到所有循环迭代执行完成。当提交到并发queue时,循环迭代的执行顺序是不确定的
dispatch_after
延迟指定时间之后执行任务
dispatch_after(dispatch_time_t when, dispatch_queue_t queue, ^(void)block)
when:延迟执行时间 一般是一个这样的时间函数: dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC))
queue:队列 dispatch_get_main_queue()或者 dispatch_get_global_queue()
block:执行的任务
dispatch_once
dispatch_once(dispatch_once_t *predicate, ^(void)block)
predicate: 用来判断需要执行的任务是否执行完成
block :需要执行的一次性任务
+ (instantClass *)sharedClient {
static instantClass *_sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedClient = [[instantClass alloc] init];
});
return _sharedClient;
}
dispatch_group
dispatch_grpup,把若干个任务放到一个dispatch group中
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PREORITY_DEFAULT,0);
dispatch_queue_group group = dispatch_group_craete();
dispatch_group_aysnc(group, queue,^{
//do some async work
});
dispatch_group_async 和 dispatch_async一样,会把任务放到queue中执行,只不过它比dispatch_async多了一步操作,就是把这个任务和group相关联,
把这些任务放到group之后,我们可以调用dispatch_group_wait来等待任务完成。若任务已经全部完成或者为空,直接返回,否则等待所有任务完成之后返回。注意返回之后任务清空。
dispatch_group_wait(group,DISPATCH_TIME_FORVER);
dispatch_release(group);
以上是关于dispatch_apply的用法的主要内容,如果未能解决你的问题,请参考以下文章