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();
}
}
}
swift中利用系统线程实现异步加载数据同步更新UI的更多相关文章
- 在vue中使用Echarts画曲线图(异步加载数据)
现实的工作中, 数据不可能写死的,所有的数据都应该通过发送请求进行获取. 所以本项目的需求是请求服务器获得二维数组,并生成曲线图.曲线图的横纵坐标均从获得的数据中取得. Echarts官方文档: ht ...
- 新手教程:不写JS,在MIP页中实现异步加载数据
从需求谈起:在 MIP 页中异步加载数据 MIP(移动网页加速器) 的 加速原理 除了靠谱的 MIP-Cache CDN 加速外,最值得一提的就是组件系统.所有 JS 交互都需要使用 MIP 组件实现 ...
- HTML5中script的async属性异步加载JS
HTML5中script的async属性异步加载JS HTML4.01为script标签定义了5个属性: charset 可选.指定src引入代码的字符集,大多数浏览器忽略该值.defer 可 ...
- 淘宝购物车页面 智能搜索框Ajax异步加载数据
如果有朋友对本篇文章的一些知识点不了解的话,可以先阅读此篇文章.在这篇文章中,我大概介绍了一下构建淘宝购物车页面需要的基础知识. 这篇文章主要探讨的是智能搜索框Ajax异步加载数据.jQuery的社区 ...
- winform异步加载数据到界面
做一个学习记录. 有两个需求: 1.点击按钮,异步加载数据,不卡顿UI. 2.把获取的数据加载到gridview上面. 对于需求1,2,代码如下: public delegate void ShowD ...
- [Android Pro] 使用CursorLoader异步加载数据 from 3.0
Android 3.0引入了CursorLoader实现异步加载数据,为了避免同步查询数据库时阻塞UI线程的问题.在API 11之前可以通过下载支持库,来使之前的系统支持此功能,下载页面为 http: ...
- android 网络异步加载数据进度条
ProgressDialog progressDialog = null; public static final int MESSAGETYPE = 0; private void execute( ...
- 向上滚动或者向下滚动分页异步加载数据(Ajax + lazyload)[上拉加载组件]
/**** desc : 分页异步获取列表数据,页面向上滚动时候加载前面页码,向下滚动时加载后面页码 ajaxdata_url ajax异步的URL 如data.php page_val_name a ...
- Highcharts 异步加载数据曲线图表
导入 data.js 文件 异步加载数据需要引入以下js 文件: <script src="http://code.highcharts.com/modules/data.js&quo ...
随机推荐
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 图片
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- NO20文件属性--inode--block-企业场景题
壹 Linux文件属性描述:在Linux里一切皆文件Linux系统中的文件或目录的属性主要包括:索引节点(inode).文件类型.权限属性.链接数.所归属的用户和用户组.最近修改时间等内容. 例子: ...
- 在 Rolling Update 中使用 Health Check【转】
上一节讨论了 Health Check 在 Scale Up 中的应用,Health Check 另一个重要的应用场景是 Rolling Update.试想一下下面的情况: 现有一个正常运行的多副本应 ...
- AJAX的get表单请求方式简述
一般在页面中常用在表单的操作中,请求数据, action : 数据提交的地址,默认是当前页面 method : 数据提交的方式,默认是get方式 get: 把数据名称和数据值用=连接,如果有多个的话, ...
- 嵊州普及Day2T2
题意:对于n个数的数列,进行排列,求第m个大于此数列的数列. 思路:查找后2个是否逆序,若是,将后3个递归.如此运算,找后面大于此数中最小数交换,然后将后面数列顺序排列. 相对简单. 见代码: #in ...
- 学会C#
一.字符串插值 (String Interpolation) C# 6之前我们拼接字符串时需要这样 var Name = "Jack"; var results = "H ...
- DevOps - 生命周期
章节 DevOps – 为什么 DevOps – 与传统方式区别 DevOps – 优势 DevOps – 不适用 DevOps – 生命周期 DevOps – 与敏捷方法区别 DevOps – 实施 ...
- 【pwnable.kr】 codemap
pwnable新的一题. download: http://pwnable.kr/bin/codemap.exe ssh codemap@pwnable.kr -p2222 (pw:guest) 这道 ...
- SQL语句--分组统计
一.教师号 星期号 是否有课1 2 有1 3 有2 1 有3 2 有`1 2 有写一条sql语句让你变为这样的表教师号 星期一 星期二 星期三1 2 12 13 1各星期下的数字表示:对应的教师在星期 ...
- C++编程学习(八)new&delete动态内存分配
前段时间楼主忙着期末大作业,停更了一段,今天刚好在做机器人课程的大作业时,和同组的小伙伴利用python做了工业机器人的在线编程,突然想起来很久没有阅读大型工程了,马上补上- 接下来的几篇博客主要是博 ...