关于TableView中图片的延时加载

转载 2013年12月05日 14:30:55


经常我们会用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下来一次后就将图片缓存起来,再次显示的时候就不用去下载。

相关文章推荐

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

IOS开发中如何解决TableView中图片延时加载是本文要介绍的内容,主要是来学习TableView加载图片的问题。具体内容来看本文详细内容。 经常我们会用tableView显示很多条目, 有...

iPhone table 实现动态加载图片的教程-TableView中图片的延时加载

iPhone在加载列表时,如果每个等待把所有列表中的数据都加载完在显示相关内容,如果列表中有一些比较大的图片,加载的时间比较长,那么给用户的效果就很差了,下面详细是一种实现动态加载图片的办法: ...

图片延时 加载原理 及应用

关于 图片延时加载的基本理论: 当我们浏览一个页面时,我们有时候并不会看完一个网页的所有内容,那么我们在客户不浏览完所有内容的情况下,加载完所有的图片就会浪费流量,而且也会影响到网页的加载时间。为了...

ionic入门教程第十五课-ionic性能优化之图片延时加载

周五的时候有个朋友让我写一个关于图片延时加载的教程, 直到今天才有空编辑,这阶段真的是很忙,公众号都变成僵尸号了。 实在是对不起大家。 有人喜欢我的教程,可能我总习惯了用比较简单容易理解的方式去描述这...

Echo.js纯JavaScript图片延时加载插件

Echo.js 是一个独立的 JavaScript 插件,轻量级、体积小压缩版本不足1k,使用 HTML5 的 data- 自定义属性定义真实的图片地址,通过插件实现图片的延时加载,有效缓解服务器压力...

tableview 图片异步加载

.h #import @interface AsynImageView : UIImageView { NSURLConnection *connection; NSMutable...

IOS(swift)-scrollView(tableView) ·图片加载逻辑的优化

Table View 中图片加载逻辑的优化 虽然这种优化方式在现在的机能和网络环境下可能看似不那么必要,但在我最初看到这个方法是的 09 年(印象中是 Tweetie 作者在 08 年写的 Blog...

IOS从网络上异步加载一系列的图片并显示在tableview上的例子

首先从服务器上加载数据:

iOS tableView的图片缓存异步加载

1.建立一个viewController. .h文件实现UIScrollViewDelegate和UITableViewDelegate,并声明ICTableViewDelegate(用来实现图片有缓...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于TableView中图片的延时加载
举报原因:
原因补充:

(最多只允许输入30个字)