OC高效率52之通过Dispatch Group机制,根据系统资源状况来执行任务

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
/**
 *  disoatch group 是GCD的一项特性,能够把任务分组
 */
- (void)viewDidLoad {
    [super viewDidLoad];
    //1、创建
    dispatch_group_t group = dispatch_group_create();
    //任务编组的两组方法
    //一:
    void dispatch_group_async(dispatch_group_t group,dispatch_queue_t queue,dispatch_block_t block);
    //二:
    void dispatch_group_enter(dispatch_group_t group);
    void dispatch_group_leave(dispatch_group_t group);
    
    //用于等待dispatch group执行完毕
    long dispatch_group_wait(dispatch_group_t group,dispatch_time_t timeout);//要等待的group,等待执行完毕时,阻塞时间
    void dispatch_group_notify(dispatch_group_t group,dispatch_queue_t queue,dispatch_block_t block);
    
    //令数组中每个对象都执行某项任务,并且想等待所有任务执行完毕。
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_group_t dispatchGroup = dispatch_group_create();
    NSArray *collection;
    for (id object in collection) {
        dispatch_group_async(dispatchGroup, queue, ^{
            //object do task
        });
    }
    
    dispatch_group_wait(dispatchGroup,DISPATCH_TIME_FOREVER);//直到处理完所有任务
    
    //若当前线程不应阻塞,则用notify代替wait
    dispatch_queue_t notifyQueue = dispatch_get_main_queue();
    dispatch_group_notify(dispatchGroup, notifyQueue, ^{
        //       block处理完所有任务
    });
    
    //把任务提交到并发队列
    dispatch_queue_t lowPriorityQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
    
    dispatch_queue_t highPriorityQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0);
    NSArray *lowPriorityQueueObjects;
    NSArray *highPriorityQueueObjects;
    for (id object in lowPriorityQueueObjects){
        dispatch_group_async(dispatchGroup, lowPriorityQueue, ^{
            // object perform task
        });
    }
    
    for (id object in highPriorityQueueObjects){
        dispatch_group_async(dispatchGroup, highPriorityQueue, ^{
            //object perform task
        });
    }
    dispatch_queue_t notifyQueue1 = dispatch_get_main_queue();
    dispatch_group_notify(dispatchGroup, notifyQueue1, ^{
        //
    });

    //GCD方法实现,数组每个元素执行任务
    dispatch_queue_t queueGCD = dispatch_queue_create("www.queue", NULL);
    dispatch_apply(10, queueGCD, ^(size_t i) {
        //perform task
    });
    //等效于
    for (int i = 0; i<10;i++){
    //perform task
    }
    
}
@end


转载于:https://my.oschina.net/u/2319073/blog/651751

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值