1.dispatch_group_t
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t searialQueue = dispatch_queue_create("com.hmc.www", DISPATCH_QUEUE_SERIAL);
dispatch_group_enter(group);
dispatch_async(searialQueue, ^{
//// 网络请求一
[NSThread sleepForTimeInterval:1];
NSLog(@"网络请求一");
dispatch_group_leave(group);
});
dispatch_group_enter(group);
dispatch_async(searialQueue, ^{
// 网络请求二
[NSThread sleepForTimeInterval:1];
NSLog(@"网络请求二");
dispatch_group_leave(group);
});
dispatch_group_enter(group);
dispatch_async(searialQueue, ^{
// 网络请求三
[NSThread sleepForTimeInterval:1];
NSLog(@"网络请求三");
dispatch_group_leave(group);
});
//三个网络请求结束后(三个网络请求有先后顺序),会进入这个方法,在这个方法中进行洁面的刷行
dispatch_group_notify(group, searialQueue, ^{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
// 刷新UI
NSLog(@"刷新UI");
});
});
});
执行结果:
2020-08-03 14:07:13.972148+0800 GCDDemo[4731:159552] 网络请求一
2020-08-03 14:07:14.977551+0800 GCDDemo[4731:159552] 网络请求二
2020-08-03 14:07:15.983003+0800 GCDDemo[4731:159552] 网络请求三
2020-08-03 14:07:15.983349+0800 GCDDemo[4731:159501] 刷新UI
2.dispatch_semaphore_t
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
dispatch_async(queue, ^{
//// 网络请求一
[NSThread sleepForTimeInterval:1];
NSLog(@"网络请求一");
dispatch_semaphore_signal(sem);
});
dispatch_async(queue, ^{
// 网络请求二
[NSThread sleepForTimeInterval:1];
NSLog(@"网络请求二");
dispatch_semaphore_signal(sem);
});
dispatch_async(queue, ^{
// 网络请求三
[NSThread sleepForTimeInterval:1];
NSLog(@"网络请求三");
dispatch_semaphore_signal(sem);
});
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
//三个网络请求结束后(三个网络请求没有先后顺序),会进入这个方法,在这个方法中进行洁面的刷行
dispatch_async(dispatch_get_main_queue(), ^{
// 刷新UI
NSLog(@"刷新UI");
});
执行结果:
2020-08-03 14:08:41.418035+0800 GCDDemo[4731:161332] 网络请求二
2020-08-03 14:08:41.418033+0800 GCDDemo[4731:161333] 网络请求三
2020-08-03 14:08:41.418033+0800 GCDDemo[4731:160835] 网络请求一
2020-08-03 14:08:41.418937+0800 GCDDemo[4731:159501] 刷新UI
有问题请指正
网友评论