iOS取经之路

iOS 前面任务下载完成,执行后续操作。

2018-09-05  本文已影响64人  上帝很忙

1.思路:GCD调度组:dispatch_group

- (void)dispatch_group{
    
    NSArray*moviesArray = [NSArray arrayWithObjects:
                          @"第1集", @"第2集",@"第3集",@"第4集",@"第5集",
                          @"第6集",@"第7集",@"第8集",@"第9集",@"第10集",
                          @"第11集", @"第12集",@"第13集",@"第14集",@"第15集",
                          @"第16集",@"第17集",@"第18集",@"第19集",@"第20集",
                          nil];

    dispatch_group_t group = dispatch_group_create();
    //for循环创建任务,加入到group中
    for (int i = 0; i<moviesArray.count; i++) {
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            NSLog(@"%@开始下载",moviesArray[i]);
            sleep(i+1);//假设后集比前集多耗时1秒,即第一集用时1秒,第二集2秒...
            NSLog(@"%@下载完成",moviesArray[i]);
        });
    }

    //group完成
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"全部任务下载完成");
    });
    
}

或者

- (void)dispatch_group2{
    
    NSArray*moviesArray = [NSArray arrayWithObjects:
                           @"第1集", @"第2集",@"第3集",@"第4集",@"第5集",
                           @"第6集",@"第7集",@"第8集",@"第9集",@"第10集",
                           @"第11集", @"第12集",@"第13集",@"第14集",@"第15集",
                           @"第16集",@"第17集",@"第18集",@"第19集",@"第20集",
                           nil];
    
    dispatch_group_t group = dispatch_group_create();
    
    for (int i = 0; i<moviesArray.count; i++) {
        
        dispatch_group_enter(group);//进入
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            
            NSLog(@"%@开始下载",moviesArray[i]);
            sleep(i+1);//假设后集比前集多耗时1秒,即第一集用时1秒,第二集2秒...
            NSLog(@"%@下载完成",moviesArray[i]);
            
            dispatch_group_leave(group);//抽出
        });
  
    }
    
    //group完成
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"全部任务下载完成");
    });
    
}

效果一样

GCDGroup.gif

2.概念

GCDGroup概念.png
上图节选自 https://www.jianshu.com/p/324c2fded696 group一节
上一篇 下一篇

猜你喜欢

热点阅读