GCD学习之——dispatch_apply

dispatch_apply
dispatch_apply函数是dispatch_sync函数和Dispatch Group的关联API.该函数按指定的次数将指定的Block追加到指定的Dispatch Queue中,并等待全部处理执行结束。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_apply(10,queue,^(size_t index){
   NSLog(@"%zu",index);
});
NSLog(@"done");

执行结果为:

4
1
0
3
5
2
6
8
9
7
done

因为在Global Dispatch Queue 中执行处理,所以各个处理的执行时间不定。但输出结果中最后的done必定在最后的位置上。这是因为dispatch_apply函数会等待全部处理执行结束。
第一个参数为重复次数,第二个参数为追加对象的Dispatch Queue,第三个参数为追加的处理。与到目前为止所出现的例子不同,第三个参数的Block为带有参数的Block。这是为了按第一个参数重复追加Block并区分各个Block而使用。
另外,由于dispatch_apply函数业余dispatch_sync函数相同,会等待处理执行结束,因此推荐在dispatch_async函数中非同步地执行dispatch_apply函数。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
//在Global Dispatch Queue中非同步执行
dispatch_async(queue,^{
  //Global Dispatch Queue
  //等待dispatch_apply函数中全部处理执行结束
  dispatch_apply([array count],queue,^(size_t index){
    //并列处理包含在NSArray对象的全部对象
    NSLog(@"%zu:%@",index,[array objectAtIndex:index]);
});
//dispatch_apply函数中的处理全部执行结束

//在Main Dispatch Queue中非同步执行
dispatch_async(dispatch_get_main_queue(),^{
  //在Main Dispatch Queue中执行处理
  //用户界面更新等
  NSLog(@"done");
 });
});

你可能感兴趣的:(ios,apply,Dispatch,gcd)