IOS 延时加载TableView中Cell中的图片

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

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

重写如下方法

  1. - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
  2. {
  3. UIImage *image = [self getImageForCellAtIndexPath:indexPath];  //从网上取得图片
  4. [cell.imageView setImage:image];
  5. }

这虽然解决了延时加载的问题, 但当网速很慢, 或者图片很大时(假设,虽然一般cell中的图很小),你会发现程序可能会失去对用户的响应.

原因是

  1. UIImage *image = [self getImageForCellAtIndexPath:indexPath];

这个方法可能要花费大量的时间,主线程要处理这个method,所以失去了对用户的响应.

所以要将该方法提出来:

  1. - (void)updateImageForCellAtIndexPath:(NSIndexPath *)indexPath
  2. {
  3. NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  4. UIImage *image = [self getImageForCellAtIndexPath:indexPath];
  5. UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
  6. [cell.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];
  7. [pool release];
  8. }

然后再新开一个线程去做这件事情

  1. - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
  2. {
  3. [NSThread detachNewThreadSelector:@selector(updateImageForCellAtIndexPath:) toTarget:self withObject:indexPath];
  4. }

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

时间: 2025-01-05 02:07:17

IOS 延时加载TableView中Cell中的图片的相关文章

IOS延时加载网络图片

    重网上下载图片是很慢的,为了不影响体验,选择延时加载图片是很好的办法. 一个tableView 列表,左边暂时没有图 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath { static NSString *CellIdentifier = @"myCell"; UITableViewCell *cell = [tableVie

iOS 延时加载

这里列举了四种线程延时加载的方法, 1.performSelector方法 此方法必须在主线程中执行,并不是阻塞当前的线程 [self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.0f]; 2.定时器:NSTimer,也必须在主线程中加载,是一种非阻塞的执行方式 [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@select

IOS UIwebView加载本地文件(支持显示图片)

1,本地的html文件一定要放到工程文件的根目录 2,html代码中的图片路径一定要是相对路径 3,下面是用UIWebView调用本地文件的方法 方法一: NSString *filePath = [[NSBundle mainBundle]pathForResource:@"1" ofType:@"html"]; NSString *htmlString = [NSString stringWithContentsOfFile:filePath encoding:

IOS开发中如何解决TableView中图片延时加载

经常我们会用tableView显示很多条目, 有时候需要显示图片, 但是一次从服务器上取来所有图片对用户来浪费流量, 对服务器也是负担.最好是按需加载,即当该用户要浏览该条目时再去加载它的图片. - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { UIImage *image = [self g

iOS中UITableView--(从plist读取数据到model,实现懒加载, TableView的数据加载)

#import "RootViewController.h" #import "Htohero.h" @interface RootViewController ()<UITableViewDataSource> @property (nonatomic, retain) NSArray *apps; @end @implementation RootViewController - (void)viewDidLoad { [super viewDidL

Mybatis 中延时加载

1 为了处理N+1 问题,Mybatis 引入了延时加载功能,意义是一开始并不取出关联数据,只有当使用时,才发送sql语句去取. mybatis中两个全局设置 lazyLoadingEnabled 和 aggressiveLazyLoading 是否开启延迟加载功能. mybatis 中的默认情况下是及时加载的,一旦关联比较多,会造成性能问题. 1.1)如果设置 lazyLoadingEnabled  = true,默认情况下mybatis 是按层级延时加载的. 1.2)如果在设置了1.1 后,

Java ClassLoader基础及加载不同依赖 Jar 中的公共类

转载自:最新内容及最清晰格式请见 http://www.trinea.cn/android/java-loader-common-class/ 本文主要介绍 ClassLoader 的基础知识,ClassLoader 如何动态加载 Jar,ClassLoader 隔离问题及如何加载不同 Jar 中的公共类. 本文工程开源地址见:Java Dynamic Load [email protected],Clone 以后直接以 Java Application去运行 java-dynamic-load

java类中各成分的加载顺序跟内存中的存放位置-----转载

1 参加一个笔试,有一个关于类的静态代码块.构造代码块.构造函数的执行顺序的问题.不太清楚,网上百度了一下.在这里记录一下. 2 3 一.什么时候会加载类? 4 使用到类中的内容时加载:有三种情况 5 1.创建对象:new StaticCode(); 6 2.使用类中的静态成员:StaticCode.num=9; StaticCode.show(); 7 3.在命令行中运行:java StaticCodeDemo 8 9 二.类所有内容加载顺序和内存中的存放位置: 10 利用语句进行分析. 11

解析OBJ模型并将其加载到Unity3D场景中

??各位朋友,大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是http://qinyuanpei.com.今天想和大家交流的是解析obj模型并将其加载到Unity3D场景中,虽然我们知道Unity3D是可以直接导入OBJ模型的,可是有时候我们并不能保证我们目标客户知道如何使用Unity3D的这套制作流程,可能对方最终提供给我们的就是一个模型文件而已,所以这个在这里做这个尝试想想还是蛮有趣的呢,既然如此,我们就选择在所有3D模型格式中最为简单的OBJ模型来一起探讨这个问题吧! 关于OBJ模