swift中利用系统线程实现异步加载数据同步更新UI

swift中的使用案例样式

// Mark: -数据源更新

    typealias AddDataBlock = () ->Void

    var updataBlock:AddDataBlock?

 

func loadLiveData(){

        let grpup = DispatchGroup()

        grpup.enter()

        //        //首页直播接口请求

        HomeLiveProvider.request(.liveList) { result in

            if case let .success(response) = result {

                //解析数据

                let data = try? response.mapJSON()

                let json = JSON(data!)

                if let mappedObject = JSONDeserializer<HomeLiveModel>.deserializeFrom(json: json.description) { // 从字符串转换为对象实例

                    self.lives = mappedObject.data?.lives

                    self.categoryVoList = mappedObject.data?.categoryVoList

//                    self.collectionView.reloadData()

                    // 更新tableView数据

//                    self.updataBlock?()

                    grpup.leave()

                }

            }

        }

        

        grpup.enter()

        //        //首页直播滚动图接口请求

        HomeLiveProvider.request(.liveBannerList) { result in

            if case let .success(response) = result {

                //解析数据

                let data = try? response.mapJSON()

                let json = JSON(data!)

                if let mappedObject = JSONDeserializer<HomeLiveBanerModel>.deserializeFrom(json: json.description) { // 从字符串转换为对象实例

                    self.homeLiveBanerList = mappedObject.data

                    //                    let index: IndexPath = IndexPath.init(row: 0, section: 1)

                    //                    self.collectionView.reloadItems(at: [index])

                    // 更新tableView数据

//                    self.updataBlock?()

                    grpup.leave()

                }

            }

        }

        

        

        

        grpup.enter()

        //        //首页直播排行榜接口请求

        HomeLiveProvider.request(.liveRankList) { result in

            if case let .success(response) = result {

                //解析数据

                let data = try? response.mapJSON()

                let json = JSON(data!)

                if let mappedObject = JSONDeserializer<HomeLiveRankModel>.deserializeFrom(json: json.description) { // 从字符串转换为对象实例

                    self.multidimensionalRankVos = mappedObject.data?.multidimensionalRankVos

                    //                    let index: IndexPath = IndexPath.init(row: 0, section: 2)

                    //                    self.collectionView.reloadItems(at: [index])

                    // 更新tableView数据

//                    self.updataBlock?()

                    grpup.leave()

                }

            }

        }

        

        grpup.notify(queue: DispatchQueue.main) {

            self.updataBlock?()

        }

    }

 

oc中的使用样式

 

//一个并发队列

    dispatch_queue_t queueE = dispatch_queue_create("group.queue", DISPATCH_QUEUE_CONCURRENT);

    

    //一个线程组

    dispatch_group_t groupE = dispatch_group_create();

    1.请求轮播图的数据

    dispatch_group_async(groupE, queueE, ^{

        dispatch_group_enter(groupE);

        dispatch_async(dispatch_get_global_queue(0, 0), ^{

            

            [self requestCarousel:^{

                dispatch_group_leave(groupE);

            }];

        });

        

    });

    2.请求新闻轮播图的数据

    dispatch_group_async(groupE, queueE, ^{

        

        dispatch_group_enter(groupE);

        dispatch_async(dispatch_get_global_queue(0, 0), ^{

            

            [self requestNews:^{

                dispatch_group_leave(groupE);

            }];

        });

        

    });

    3.校园活动【师生展评】

    dispatch_group_async(groupE, queueE, ^{

        

        dispatch_group_enter(groupE);

        dispatch_async(dispatch_get_global_queue(0, 0), ^{

            

            //3.校园活动【师生展评】

            [self requestCampAcitivetis:^{

                dispatch_group_leave(groupE);

            }];

            

        });

        

    });

    

    4.尾部视图

    dispatch_group_async(groupE, queueE, ^{

        

        dispatch_group_enter(groupE);

        dispatch_async(dispatch_get_global_queue(0, 0), ^{

            

            //3.尾部视图

            [self requestClass:^{

                dispatch_group_leave(groupE);

            }];

            

        });

        

    });

    dispatch_group_notify(groupE, dispatch_get_main_queue(), ^{

        //staticWeakSelf 随情况而定

        [staticWeakSelf setUpUI];

        

    });

 

 

//1.请求轮播图的数据

- (void)requestCarousel:(void(^)(void))leveBlock{

  

 [AFHTTPRequestManager reqesutSuccess{

    

  

  if (leveBlock) {

            leveBlock();

        }

  } requestFaliure{

    

  if (leveBlock) {

            leveBlock();

        }

  }

}

转载于:https://www.cnblogs.com/sundaysme/p/10612919.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值