今天遇到一个问题,从网络上,下载图片之后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上下滚动卡顿(获取网络数据,下载图片之后)相关推荐

  1. 前端性能优化方法与实战05 指标采集:白屏、卡顿、网络环境指标采集方法

    上一讲我们介绍了首屏时间的指标采集,这一讲我们来聊聊前端其他的性能指标采集,比如白屏.卡顿和网络环境. 你乘火车.地铁.飞机都走过安检吧?如果说首屏时间类似你过安检的时刻,那么,白屏时间就是你排队到安 ...

  2. bootsrtap h5 移动版页面 在苹果手机ios滑动上下拉动滚动卡顿问题解决方法

    bootsrtap h5 移动版页面 在苹果手机ios滑动上下拉动滚动卡顿问题解决方法 bootsrtap框架做的h5页面,在android手机下没有卡顿问题,在苹果手机就一直存在这问题,开始毫无头绪 ...

  3. android—获取网络数据

    取网络数据主要靠发交易(或者说请求,接口等),而这些交易由java中的网络通信,HttpURLConnection和HttpClient实现,以下是具体例子. 大家都知道,网络通信,发送请求有两种方式 ...

  4. 安卓 原生okhttp使用get与post获取网络数据

    网址 https://square.github.io/okhttp/ 配置 依赖 在module的build.gradle中: implementation 'com.squareup.okhttp ...

  5. Swift实战-豆瓣电台(三)获取网络数据

    原文:Swift实战-豆瓣电台(三)获取网络数据 观看地址:http://v.youku.com/v_show/id_XNzMwMzQxMzky.html 这节内容,我们先说了怎么将storyboar ...

  6. 解决微信小程序ios端滚动卡顿的问题

    解决微信小程序ios端滚动卡顿的问题 参考文章: (1)解决微信小程序ios端滚动卡顿的问题 (2)https://www.cnblogs.com/goloving/p/10563472.html 备 ...

  7. Python零基础速成班-第12讲-Python获取网络数据Socket,API接口,网络爬虫Crawler(制作弹幕词云)

    Python零基础速成班-第12讲-Python获取网络数据Socket,API接口,网络爬虫Crawler(制作弹幕词云) 学习目标 获取网络数据Socket API接口 网络爬虫Crawler(制 ...

  8. 【搬运自用】 用Python获取网络数据 -Python100天从新手到大师Day57(GitHub)

    用Python获取网络数据 原作者:骆昊 https://github.com/jackfrued/Python-100-Days 更多内容欢迎查看并订阅专栏'Python从新手到大师'和'Pytho ...

  9. Arduino ESP32 获取网络数据(HTTP POST方式)

    Arduino ESP32 获取网络数据(HTTP POST方式) 相关篇<Arduino ESP32 获取网络数据(HTTP GET方式)> <Arduino ESP32 获取网络 ...

最新文章

  1. 平头哥玄铁处理器Linux新版本,5大亮点速览
  2. 组织机构代码证号码校验
  3. 颠倒整数的C语言程序,帮忙解决c语言题目1.编写一个程序,用户输入一个小于5位的正整数,把它的各位数字前后颠倒一下,并输出颠倒后的结果。2.编...
  4. idea编译工程时出现Error:java: 无效的目标发行版: 1.8
  5. C++(静态)(常量)数据进行初始化问题以及静态变量析构
  6. 初始分布式事务中间件seata
  7. 想快速重构智慧园区5A系统,这份方案推荐给你
  8. CentOS 7 搭建 Ceph 集群(nautilus 版本)
  9. window对象与document对象的区别
  10. HttpModule HttpHandler(转)
  11. python miio 连接小米网关_能接入小米米家的智能筒灯,69元一个,你见过吗?
  12. 如何破解(免积分)下载百度文库+豆丁收费文档
  13. Java实现Map转List
  14. html中table分页显示,html中table表格分页
  15. namecheap 添加二级域名
  16. 仓位管理之二: 凯利公式指导投资与多种资金管理方式
  17. Word不计算封面、目录页数将正文页码修改为第几页共几页的格式
  18. 证件照怎么制作?超简单的证件照制作教程来了
  19. AKA传奇和亚嵌那些事
  20. 我以为自己MySQL够牛逼了,直到被腾讯面试官狠狠抽了两巴掌

热门文章

  1. 【久远讲算法】队列——先进先出的数据结构
  2. 如何修复Word文档XML提示
  3. 《中国美食》习字优秀作品展示
  4. 蓝桥杯 算法提高 卡勒沃夫之弱水路三千(提高型)
  5. satd 与 sad
  6. 安装2008 R2 SQL,在安装程序支持文件时页面闪退
  7. 机器学习应用设计阶段的 10 个陷阱和 11 个最佳实践
  8. 生活有时候还是需要点这个的
  9. canvas五彩斑斓的粒子动画js特效
  10. 上司让发布图文链接到群!有没有办法解决群发到群9个的限制?或者群发给好友200人的限制?