美文网首页
优化tableview加载网络图片

优化tableview加载网络图片

作者: 黑暗森林的歌者 | 来源:发表于2018-09-24 21:45 被阅读98次

优化tableview加载网络图片

最近在优化公司的TableView的代码,有个界面需要加载一个在线的图片列表,在快速滑动的时候,会异步下载多个图片,容易造成内存警告,于是就准备在滑动的时候停止加载网络图片,停止滑动的时候再请求网络图片。

在控制器中实现下面的方法:

// scrollView的代理方法,表示减速结束,这时候让cell加载图片

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{

    [self loadShowCells];

}

// 自定义cell的setmodel方法,这时候是load图片

-(void)loadShowCells {

   NSArray * array = [self.tableView indexPathsForVisibleRows];
   for (NSIndexPath *indexPath in array) {        

   UITableViewCell * cell = [self.tableView cellForRowAtIndexPath:indexPath];  
   [cell setPhotoModel:self.tableDataArray[indexPath.row] isLoadImg:YES];
   }

}


// UITableview的代理,这时候只赋值给cell,显示需要的内容,但是不加载网络图片

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID"];

   if (cell == nil) {

       cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cellID"];

}
    
   [cell setPhotoModel:self.tableDataArray[indexPath.row] isLoadImg:NO];

   
   return cell;

}

在cell中判断是否加载网络图片

- (void)setPhotoModel:(PictureModel *)model isLoadImg:(BOOL)isload {
   if (isload) {
       [self.imgView sd_setImageWithURL:model.imgUrl placeholderImage:[UIImage imageNamed:@"default"]];

   }
   else {
        self.imgView.image = [UIImage imageNamed:@"default"];
    }

}

这样在tableview滑动的时候cell是不会加载网络图片的,只有在滑动停止,滚动开始减速的时候,会让当前显示的cell加载网络图片

相关文章

网友评论

      本文标题:优化tableview加载网络图片

      本文链接:https://www.haomeiwen.com/subject/pdbhoftx.html