iOS Tableview多图优化

在开发中,如果UITableviewcell中有多个网络图片,用了SDWebImage加载,滚动的时候,UITableview掉帧非常严重

目前的优化方式,是UITableView滚动时不加载网络图片,停止滚动后,只加载展现在屏幕上的cell的网络图片,使用此方法之后流畅度有明显提高,具体如下:

1 首先在uitableviewcell要加载的模型里,增加一个isLoad属性,如下

@interface CICommunityModel : CIBaseModel

@property(nonatomic,copy)NSString *id;
@property(nonatomic,copy)NSString *micFilePath;
@property(nonatomic,assign)BOOL isLoad;

@end

2 网络请求下来模型属性赋值的时候isLoad直接设置为false

3uitableview代理返回cell的方法里代码如下

    CICommunityModel *model = self.tabArray[indexPath.row];
   
    if (indexPath.row<2) {
        //前三个必须加载
        [model setIsLoad:YES];
    }
    if (model.isLoad) {
        [cell setImageWithModel:model];//此方法里设置SDWebImage加载图片
    }else{
        
        [cell setImageWithModel:nil];
    }

4在cell的 setImageWithModel方法里加载网络图片,加载完成之后把model里的isLoad设置为true

[self.contentImg sd_setImageWithURL:[NSURL URLWithString:media.micFilePath] placeholderImage:CIImage(@"placeholderimg") completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
                    [model setIsLoad:YES];
                }];

5tableview滚动停止的时候加载在屏幕中的cell中相应的网络图片


- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    if(scrollView==self.tableView){
        [self loadShowCells];
    }else{
        
    }
}

6首先找到展示在屏幕里的cell ,然后调用cell里的setImageWithModel方法加载网络图片

-(void)loadShowCells{
    NSArray * array = [self.tableView indexPathsForVisibleRows];
    for (NSIndexPath *indexPath in array) {
        
        CIVideosListTableCell * cell = (CIVideosListTableCell *)[self.tableView cellForRowAtIndexPath:indexPath];
        CICommunityModel *model = self.tabArray[indexPath.row];
  
        [cell setImageWithModel:model];
        
    }

    
}

 

你可能感兴趣的:(Objective-C,tableview内存优化,加载网络图片优化)