首页 > 其他分享 >关于TableView中图片的延时加载

关于TableView中图片的延时加载

时间:2023-04-30 20:31:34浏览次数:39  
标签:indexPath TableView tableView image cell 延时 图片 self 加载


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

标签:indexPath,TableView,tableView,image,cell,延时,图片,self,加载
From: https://blog.51cto.com/u_548275/6238206

相关文章

  • OpenCV加载深度学习模型
    目录1.单张图像(1)构建网络模型(2)图像预处理(3)预测结果2.多张图像本文使用OpenCV加载深度学习模型,实现了对传入的单张图像或多张图像进行预测。步骤:首先读入Caffe框架训练好的模型,然后对输入图像进行预处理操作,并将其传入已构建的网络模型,最后对得到的预测结果进行排序,找......
  • iOS开发 UItableView中的单元…
    iOSiPhone开发UItableView中的单元格背景渐变渐变如果用背景图片,会让你的app臃肿。给APP瘦身,我们可以使用代码来解决渐变的问题。这篇文章是解决表格中的单元格的简便问题,同时解决单元格外边框问题。1:设置好开始颜色与结束颜色。推荐一个小工具,在chrome浏览器上安装一个扩展......
  • iOS开发UITableView基本使用方法总…
    UITableView基本使用方法1.首先,Controller需要实现两个delegate,分别是UITableViewDelegate和UITableViewDataSource2.然后UITableView对象的delegate要设置为self。3.然后就可以实现这些delegate的一些方法拉。(1)-(NSInteger)numberOfSectionsInTableView:(UITableView*......
  • mapbox加载geojson报错error: Style is not done loading
    Mapbox加载GeoJSON地图时,遇到error:Styleisnotdoneloading错误通常是由于地图样式文件没有加载完成引起的。具体来说,可能是因为Mapbox样式文件中包含了某些需要加载的图片或者矢量图层,而这些图片或矢量图层尚未完全加载完成,导致无法渲染地图。为解决此问题,可以尝试以下......
  • nginx自定义指定加载配置
    进入 /usr/local/nginx/conf/include目录,创建 nginx.node.conf文件,在里面输入如下代码:upstreamnodejs{server127.0.0.1:3000;#server127.0.0.1:3001;keepalive64;}server{listen80;server_namewww.penguu.compenguu.com;access_lo......
  • mapbox加载geojson报错error: Style is not done loading
    Mapbox加载GeoJSON地图时,遇到error:Styleisnotdoneloading错误通常是由于地图样式文件没有加载完成引起的。具体来说,可能是因为Mapbox样式文件中包含了某些需要加载的图片或者矢量图层,而这些图片或矢量图层尚未完全加载完成,导致无法渲染地图。为解决此问题,可以尝试以......
  • vue3自定义指令实现el-select下拉加载更多
    1.新建js文件exportdefault(app)=>{app.directive('loadmore',{beforeMount(el,binding){constelement=el.querySelector('.t-select__dropdown');element.addEventListener('scroll',()=>{co......
  • java -jar XXX.jar 没有主清单属性以及找不到或无法加载主类的问题
    java-jarXXX.jar没有主清单属性以及找不到或无法加载主类的问题原文链接:https://blog.csdn.net/Mrzhuangr/article/details/124731024文章目录一、问题陈述二、解决方法1、方法一(问题没有真正解决)2、方法二(最终解决了问题)一、问题陈述环境:Idea2021jdk1.8......
  • CDN加速WordPress触发CORS导致跨域加载失败
    这两天折腾CDN加速来提升自己博客的访问速度,用的阿里云CDN加速方案;使用的时候发现一个问题,部分资源CDN加速失败,原因是触发了CORS,因为CDN加速网址与博客网址不一致引发的跨域请求不成功;从报错中发现Off与Tff字体加载报错:(index):1AccesstoFontat'http://cdn.5yun.org/wp-conte......
  • js--预加载、预渲染、懒加载、懒执行
    js--预加载、预渲染、懒加载、懒执行      ......