经常我们会用tableView显示很多条目, 有时候需要显示图片, 但是一次从服务器上取来所有图片对用户来浪费流量, 对服务器也是负担.最好是按需加载,即当该用户要浏览该条目时再去加载它的图片。

重写如下方法
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIImage *image = [self getImageForCellAtIndexPath:indexPath];  //从网上取得图片
    [cell.imageView setImage:image];
}

这虽然解决了延时加载的问题, 但当网速很慢, 或者图片很大时(假设,虽然一般cell中的图很小),你会发现程序可能会失去对用户的响应.
原因是UIImage *image = [self getImageForCellAtIndexPath:indexPath]; 这个方法可能要花费大量的时间,主线程要处理这个method.
所以失去了对用户的响应.

所以要将该方法提出来:
- (void)updateImageForCellAtIndexPath:(NSIndexPath *)indexPath
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    UIImage *image = [self getImageForCellAtIndexPath:indexPath];
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    [cell.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];
    [pool release];
}
然后再新开一个线程去做这件事情
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [NSThread detachNewThreadSelector:@selector(updateImageForCellAtIndexPath:) toTarget:self withObject:indexPath];
}

同理当我们需要长时间的计算时,也要新开一个线程 去做这个计算以避免程序处于假死状态

以上代码只是示例, 还可以改进的更多, 比如从网上down下来一次后就将图片缓存起来,再次显示的时候就不用去下载。

转载于:https://www.cnblogs.com/cherri/archive/2010/08/26/1808816.html

关于TableView中图片的延时加载(转)相关推荐

  1. yy 服务器维护中 图片无法显示,解决简书图片不显示问题“系统维护中,图片暂时无法加载”...

    天突然发现之前的文章图片全部都这样了,我还以为图片丢了! 9949918-5bfb96c2b65b9c7e.png 但是其实图片还是可以访问的 配合 Chrome,Safari 扩展程序 Tamper ...

  2. vue中图片和视频加载不出

    问题: 项目中遇到的问题,记录一下 插入背景图后,会出现如下错误,应该是图片找不出 分析: 解决: 解决办法1:打开注册表,到这个路径 "HKEY_LOCAL_MACHINE\SOFTWAR ...

  3. Flash中图片的逐步加载

    下面的flash,单击右键菜单中选"Load image"看演示. 在Flash中,有Loader类,可以从外部载入一张图片(或swf文件).但是有个不好的地方就是,不像浏览器那样 ...

  4. 延时加载技术-----仿照手机淘宝网站图片延时加载

    我这里说的是淘宝移动端的实现: 我们用手机打开淘宝触屏版首页,页面是你看到多少就加载多少,从上到下滑动加载,默认不加载. 1:引用jq库: <script type="text/jav ...

  5. 页面图片延时加载(附实例下载)

    页面图片延时加载 转载于:https://blog.51cto.com/2820354/1057576

  6. 关于解决 从相册中选择照片后无法剪切图片以及无法加载图片的问题

    程序分析: 主要分两个部分 (1)先拍照,然后剪切,最后显示出来.    (2)从相册中选择一张照片进行剪切然后显示出来 代码参照<第一行代码>,书中的代码运行时(2)出现了问题,无法剪切 ...

  7. 【Web】解决简书图片不显示问题“系统维护中,图片暂时无法加载”

    个人博客: http://www.milovetingting.cn 简书不显示图片的解决方法 首次编辑于2019-6-6 最近几天在浏览简书上的文章时,发现图片显示不出来,提示"系统维护中 ...

  8. php延迟加载图片,Html图片延迟加载,图片延时加载库(JavaScript版本)

    [温馨提示]源码包解压密码:www.youhutong.com 简介: 和 Lazy Load 一样,它也是一个用于图像延迟加载 JavaScript. 不同的是 Lazy Load 是基于 jQue ...

  9. php延迟加载js,延时加载JavaScript代码提高速度

    延时加载js代码提高速度,具体内容如下所示: 如果网页中存在大量的javascript代码会极大的影响网页的访问速度,下面就简单介绍一下如何处理此问题. 一.延时加载js文件: 可以使用定时器函数se ...

最新文章

  1. 子进程 已安装 post-installation 脚本 返回了错误号 1
  2. java for each 的源_Java JDK1.5的新特性之for-each循环的底层原理
  3. Java创建一个学生类
  4. 服务器返回它们的和_无服务器有其陷阱。 这是避免它们的方法。
  5. java 和mysql 时间_java和mysql之间的时间日期类型传递
  6. python创建和删除文件有什么区别_python创建和删除文件
  7. Linux驱动开发 -- 打开dev_dbg()
  8. 魅族手机便签里的备忘录内容如何导出到华为手机上?
  9. 微信小程序源码1000套
  10. HTML制作简单的个人简历网页
  11. 【STM32F407的DSP教程】第2章 Matlab R2018a的安装
  12. 深度可分离卷积组卷积
  13. html怎样改成png格式,如何将jpg图片转换成png格式 又怎样把png转换成jpg
  14. 前端-JS基础之数据类型
  15. 微信服务号认证和不认证的区别
  16. 乘S10热销的东风,三星四机齐出再攻中国手机市场
  17. ASM磁盘空间假装耗尽,ORA-15041: diskgroup space exhausted
  18. C++ substr()函数
  19. 最强 IDE Visual Studio 2017 正式版发布-gt;最快更高效-终于等到你
  20. InfoJet Service,一个InfoPath Web表单产品

热门文章

  1. mac下 如果docker 如果访问不到网 就下载哥docker-machine 然后进入到vbox下进行操作
  2. spring eureka集群+spring boot 微服务,容器化部署示例
  3. Kibana linux下安装
  4. 实例演示oracle注入获取cmdshell的全过程
  5. Java学习进阶—高级编程
  6. Nginx平滑升级到最新版本
  7. 最幸福的事就是吃饺子
  8. Firefox 5 公开测试下载
  9. 老生常谈–希望别再纠结了朋友
  10. css文件如何设置scss,Webpack - 如何将scss编译成单独的css文件?