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

移动开发 iOS
IOS开发中如何解决TableView中图片延时加载是本文要介绍的内容,主要是来学习TableView加载图片的问题。具体内容来看本文详细内容。

IOS开发中如何解决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];  

这虽然解决了延时加载的问题, 但当网速很慢, 或者图片很大时(假设,虽然一般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];  

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

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

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

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

小结:IOS开发中如何解决TableView图片延时加载的内容介绍完了,希望通过本文的学习能对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-08-09 10:05:57

TableView服务器图片

2013-06-26 16:14:26

Android加载图片内存溢出

2023-10-30 18:35:47

MySQL主从延时

2011-06-16 14:12:30

Qt Mysql 驱动

2017-02-06 19:26:10

开发业务应用

2021-10-20 20:27:55

MySQL死锁并发

2019-11-05 14:00:23

Windows 10Outlook附件

2017-09-23 22:07:24

深度学习N 体问题GAN

2017-09-28 10:40:10

深度学习多体问题多代理系统

2023-07-05 14:38:09

2013-10-16 16:17:15

iOS开发优化方案

2011-09-28 10:13:58

2019-08-15 07:43:38

TCP网络协议丢包

2011-06-01 09:20:10

软件项目

2018-07-02 16:00:13

Windows 10Windows后台进程

2013-08-16 10:04:46

OpenSUSE 12VirtualBox

2013-12-16 11:01:08

OpenSUSEOpenSUSE 12VirtualBox

2023-09-03 22:44:28

I/O高并发

2015-03-02 09:50:14

2018-06-14 09:00:00

WordPress浏览器Web服务器
点赞
收藏

51CTO技术栈公众号