UITableView上下滚动卡顿(获取网络数据,下载图片之后)
今天遇到一个问题,从网络上,下载图片之后tableview上下滚动会很卡 通过上网查资料,找到解决办法 因为下载图片的时候是在主线程进行的 通过开辟一个子线程去下载图片 tableview上下滚动就不卡了。
在iOS应用中,UITableView应该是使用率最高的视图之一了。iPod、时钟、日历、备忘录、Mail、天气、照片、电话、短信、 Safari、App Store、iTunes、Game Center⋯几乎所有自带的应用中都能看到它的身影,可见它的重要性。
然而在使用第三方应用时,却经常遇到性能上的问题,普遍表现在滚动时比较卡,特别是table cell中包含图片的情况时。
实际上只要针对性地优化一下,这种问题就不会有了。有兴趣的可以看看 LazyTableImages这个官方的例子程序,虽然也要从网上下载图片并显示,但滚动时丝毫不卡。
下面就说说我对UITableView的了解。不过由于我也是初学者,或许会说错或遗漏一些,因此仅供参考。
首先说下UITableView的原理。有兴趣的可以看看 《About Table Views in iOS-Based Applications》。
UITableView是UIScrollView的子类,因此它可以自动响应滚动事件(一般为上下滚动)。
它 内部包含0到多个UITableViewCell对象,每个table cell展示各自的内容。当新cell需要被显示时,就会调用tableView:cellForRowAtIndexPath:方法来获取或创建一个 cell;而不可视时,它又会被释放。由此可见,同一时间其实只需要存在一屏幕的cell对象即可,不需要为每一行创建一个cell。
此 外,UITableView还可以分为多个sections,每个区段都可以有自己的head、foot和cells。而在定位一个cell时,就需要2 个字段了:在哪个section,以及在这个section的第几行。这在iOS SDK中是用NSIndexPath来表述的,UIKit为其添加了indexPathForRow:inSection:这个创建方法。
在设置数据模型的model中 设置数据时,如下
- (void)setGoods:(XHLGoods *)goods
{
_goods = goods;
//通过开辟一个子线程来下载图片
NSThread *thread = [[NSThread alloc]initWithTarget:self
selector:@selector(downImage) object:nil];
[thread start];
self.Title.text = goods.Title;
self.KanDian.text = goods.KanDian;
self.Price.text = goods.Price;
}
- (void)downImage
{
self.BackGroudImage.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURLURLWithString:_goods.imageUrl]]];
}
UITableView上下滚动卡顿(获取网络数据,下载图片之后)相关推荐
- 前端性能优化方法与实战05 指标采集:白屏、卡顿、网络环境指标采集方法
上一讲我们介绍了首屏时间的指标采集,这一讲我们来聊聊前端其他的性能指标采集,比如白屏.卡顿和网络环境. 你乘火车.地铁.飞机都走过安检吧?如果说首屏时间类似你过安检的时刻,那么,白屏时间就是你排队到安 ...
- bootsrtap h5 移动版页面 在苹果手机ios滑动上下拉动滚动卡顿问题解决方法
bootsrtap h5 移动版页面 在苹果手机ios滑动上下拉动滚动卡顿问题解决方法 bootsrtap框架做的h5页面,在android手机下没有卡顿问题,在苹果手机就一直存在这问题,开始毫无头绪 ...
- android—获取网络数据
取网络数据主要靠发交易(或者说请求,接口等),而这些交易由java中的网络通信,HttpURLConnection和HttpClient实现,以下是具体例子. 大家都知道,网络通信,发送请求有两种方式 ...
- 安卓 原生okhttp使用get与post获取网络数据
网址 https://square.github.io/okhttp/ 配置 依赖 在module的build.gradle中: implementation 'com.squareup.okhttp ...
- Swift实战-豆瓣电台(三)获取网络数据
原文:Swift实战-豆瓣电台(三)获取网络数据 观看地址:http://v.youku.com/v_show/id_XNzMwMzQxMzky.html 这节内容,我们先说了怎么将storyboar ...
- 解决微信小程序ios端滚动卡顿的问题
解决微信小程序ios端滚动卡顿的问题 参考文章: (1)解决微信小程序ios端滚动卡顿的问题 (2)https://www.cnblogs.com/goloving/p/10563472.html 备 ...
- Python零基础速成班-第12讲-Python获取网络数据Socket,API接口,网络爬虫Crawler(制作弹幕词云)
Python零基础速成班-第12讲-Python获取网络数据Socket,API接口,网络爬虫Crawler(制作弹幕词云) 学习目标 获取网络数据Socket API接口 网络爬虫Crawler(制 ...
- 【搬运自用】 用Python获取网络数据 -Python100天从新手到大师Day57(GitHub)
用Python获取网络数据 原作者:骆昊 https://github.com/jackfrued/Python-100-Days 更多内容欢迎查看并订阅专栏'Python从新手到大师'和'Pytho ...
- Arduino ESP32 获取网络数据(HTTP POST方式)
Arduino ESP32 获取网络数据(HTTP POST方式) 相关篇<Arduino ESP32 获取网络数据(HTTP GET方式)> <Arduino ESP32 获取网络 ...
最新文章
- 平头哥玄铁处理器Linux新版本,5大亮点速览
- 组织机构代码证号码校验
- 颠倒整数的C语言程序,帮忙解决c语言题目1.编写一个程序,用户输入一个小于5位的正整数,把它的各位数字前后颠倒一下,并输出颠倒后的结果。2.编...
- idea编译工程时出现Error:java: 无效的目标发行版: 1.8
- C++(静态)(常量)数据进行初始化问题以及静态变量析构
- 初始分布式事务中间件seata
- 想快速重构智慧园区5A系统,这份方案推荐给你
- CentOS 7 搭建 Ceph 集群(nautilus 版本)
- window对象与document对象的区别
- HttpModule HttpHandler(转)
- python miio 连接小米网关_能接入小米米家的智能筒灯,69元一个,你见过吗?
- 如何破解(免积分)下载百度文库+豆丁收费文档
- Java实现Map转List
- html中table分页显示,html中table表格分页
- namecheap 添加二级域名
- 仓位管理之二: 凯利公式指导投资与多种资金管理方式
- Word不计算封面、目录页数将正文页码修改为第几页共几页的格式
- 证件照怎么制作?超简单的证件照制作教程来了
- AKA传奇和亚嵌那些事
- 我以为自己MySQL够牛逼了,直到被腾讯面试官狠狠抽了两巴掌