博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多个请求统一更新界面
阅读量:7035 次
发布时间:2019-06-28

本文共 1689 字,大约阅读时间需要 5 分钟。

一个列表页面

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
*permissionArr) { DLog(@"555"); dispatch_group_leave(self.myGroup); }];}复制代码

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

打印日志为:

666222111444555333复制代码

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

// END 每天进步一点点

转载地址:http://zryal.baihongyu.com/

你可能感兴趣的文章
自定义注册的 Windows服务 无法访问网络共享文件解决办法
查看>>
Python之 set的特点
查看>>
postgersql日志备份和还原
查看>>
ubuntu mysql 命令
查看>>
域名转IP (Java实现)
查看>>
【Neuroph】1、项目Maven引用最新包
查看>>
高并发与多线程区别
查看>>
nginx日志分析工具 goaccess-nginx
查看>>
手机可以实现利用putty来管理Linux服务器
查看>>
我是如何准备ThoughtWorks面试的
查看>>
the request was rejected because its size (2877943
查看>>
修改Servlet的默认模板
查看>>
简单的pythonweb程序
查看>>
RemoteView概述
查看>>
JAVA集合小结
查看>>
ubuntu下android 源码下载
查看>>
Oracle数据库角色管理
查看>>
订单系统 高级设计
查看>>
windows 定时重启 方法
查看>>
flutter 底部输入框 聊天输入框 Flexible
查看>>