#swift # OC iOS使用Group请求多个线程网络数据,完成后再刷新数据

swift OC iOS使用Group请求多个线程网络数据,完成后再刷新数据

Dispatch Group 是GCD的一项特性,能够把任务分组。调用者可以等待这组任务执行完毕,也可以在提供回调函数之后继续往下执行,这组任务完成之后,调用者会受到通知。



 func get(){
        
       let queue = DispatchQueue.init(label: "getCount")//定义队列
        let group = DispatchGroup()//创建一个组
        //将队列放进组里
            queue.async(group: group, execute: {
                group.enter()//开始线程1
                
                let parameters:[String: String] = [
                    "user_uuid": self.user_uuid
                ]
                
                
//网络请求1 
               NetWorkManager<UserVideoInfo>.requestPost(URLManagerShared.videoUserHeaderInfo, parameters: parameters) { (result) in
                    self.hideProgress()
                    
                    switch result {
                        
                    case .success(let json):
                           group.leave()//线程1结束
                        
                        break
                    case .failure(let error):
                        self.showAlert(error.localizedDescription)
                        break
                    }
                }
        
            })
            
            
            queue.async(group: group, execute: {
                group.enter()//开始线程2
                
                    let parameters:[String: String] = [
                        "user_uuid": self.user_uuid,
                    "page":"\(self.m_page)"
                ]
                
                //网络请求2
                NetWorkManager<VideoList>.requestPost(URLManagerShared.videoUserList, parameters: parameters) { (result) in
                    self.hideProgress()
                   
                    switch result {
                        
                    case .success(let json):
                       
                            group.leave()//线程2结束
                            
				DispatchQueue.main.async {
                               
					self.collectionView.reloadData()
                           
 }
                        }else {
                            
                        }
                        break
                    case .failure(let error):
                        self.showAlert(error.localizedDescription)
                        break
                    }
                }
            })
            
            
            group.notify(queue: queue){
                //队列中线程全部结束
//                print("end")
//请求全部完成之后执行的操作  可在主线程刷新ui 可进行别的操作
                DispatchQueue.main.async {
                    self.collectionView.reloadData()
                }
            }
        
 
        
        
    }

#OC


```objectivec
//1、不开启子线程的线程组简化方式
    dispatch_group_t group = dispatch_group_create();
    //模拟网络请求1
    dispatch_group_enter(group);
    //实际运用时,用网络请求的方法代替下面的内容,不要忘记leave      异步
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        for (int i = 0; i < 5; i++) {
            [NSThread sleepForTimeInterval:1];
            NSLog(@"当前线程:%@,是否是主线程:%@...1111···%d",[NSThread currentThread],[NSThread isMainThread]?@"是":@"否",i);//当前线程:<NSThread: 0x60000027ef40>{number = 3, name = (null)},是否是主线程:否...1111···0
        }
        dispatch_group_leave(group);
    });
    NSLog(@"当前线程:%@,是否是主线程:%@...4444···",[NSThread currentThread],[NSThread isMainThread]?@"是":@"否");//当前线程:<NSThread: 0x604000071d40>{number = 1, name = main},是否是主线程:是...4444···
    //模拟网络请求2
    dispatch_group_enter(group);
    //实际运用时,用网络请求的方法代替下面的内容,不要忘记leave      异步
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        for (int i = 0; i < 5; i++) {
            [NSThread sleepForTimeInterval:1];
            NSLog(@"当前线程:%@,是否是主线程:%@...2222···%d",[NSThread currentThread],[NSThread isMainThread]?@"是":@"否",i);//当前线程:<NSThread: 0x604000272540>{number = 4, name = (null)},是否是主线程:否...2222···0
        }
        dispatch_group_leave(group);
    });
    
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"当前线程:%@,是否是主线程:%@...3333···",[NSThread currentThread],[NSThread isMainThread]?@"是":@"否");//当前线程:<NSThread: 0x604000071d40>{number = 1, name = main},是否是主线程:是...3333···
    });
















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值