多个请求统一更新界面

一个列表页面

10个请求接口

依据数据展现界面

1. 问题

碰到一个主页的需求,涉及到

  1. 自动播放的图片接口
  2. 业务栏内容的接口
  3. 热点广告的接口
  4. 热卖商品的接口
  5. 附件商店的接口
  6. 附近商品的接口
  7. 推荐商品的接口
  8. 。。。

前前后后打开主页涉及到10几个接口,因为主页使用的是一个tableview来展现,所以会涉及到刷新tableview的问题。如果按一个接口调用后再调用下一个接口的方式,那么存在效率差的问题。

2. 解决方案

使用dispatch_group_t的方法将不同接口使用异步进行获取,等到所有的接口返回数据后,再统一更新界面。 这样可以充分的发挥多线程的优势,提高访问速度和用户的体验。

3. 代码实现

@property (nonatomic, strong) dispatch_group_t myGroup;

{
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
    dispatch_group_t group = dispatch_group_create();

    self.myGroup = group;

    dispatch_group_enter(group);
    dispatch_group_async(group, queue, ^{
        [self fetchWorkStatus];

        DLog(@"111");
    });

    dispatch_group_enter(group);
    dispatch_group_async(group, queue, ^{
        [self fetchPermission];

        DLog(@"222");
    });

    dispatch_group_notify(group, queue, ^{
        DLog(@"333");
    });


    DLog(@"666");
}
复制代码

其中的fetchWorkStatus 和 fetchPermission是网络请求的方法。

- (void)fetchWorkStatus
{
    [self.mainViewModel queryHome:^(ErrorCode status, NSString *message, NSDictionary *data) {

        DLog(@"444");

        dispatch_group_leave(self.myGroup);
    }];
}

- (void)fetchPermission
{
    [self.mainViewModel fetchUserPermissionWithUid:[HXQUserAccount currentAccount].userInfoModel.uidStr
                                         completed:^(ErrorCode status, NSString *message, NSArray<NSNumber *> *permissionArr) {

                                             DLog(@"555");

                                             dispatch_group_leave(self.myGroup);
                                         }];
}
复制代码

重点: 在请求返回后调用dispatch_group_leave方法。

打印日志为:

666
222
111
444
555
333
复制代码

实现多线程并发请求数据,并在所有请求完成后,再执行一个操作。即在333中执行界面刷新。

// END 每天进步一点点

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值