将图像加载到imageview时,iOS tableview滞后于滚动

时间:2017-08-28 11:46:51

标签: ios objective-c uitableview sdwebimage

我正在使用库来为UITableviewCell调用SDWebImage进行异步(背景)图像加载。但滚动tableview时仍然面临巨大的滞后。

我做错了吗?

1000x1000

附近,加载的图片尺寸非常大

将图像加载到单元格的代码:

[cell.image sd_setImageWithURL:[NSURL URLWithString:imageUrl]
            placeholderImage:[UIImage imageNamed:@"image.png"]];

这里我将所有信息加载到tableview单元格:

-(void)viewDidLoad{
    [super viewDidLoad];
NSString *identifier = @"newsItem";
UINib *nib = [UINib nibWithNibName:@"NewsTableViewCell" bundle:nil];
[self.tableView registerNib:nib forCellReuseIdentifier:identifier];


self.dataSource = [[NewsDataSource alloc] initWithQuery:[self getQuery]
                                           populateCell:^UITableViewCell * _Nonnull(UITableView * _Nonnull tableView,
                                                                                    NSIndexPath * _Nonnull indexPath,
                                                                                    FIRDataSnapshot * _Nonnull snap) {

                                               NewsItem *newsItem = [[NewsItem alloc] initWithDictionary:snap.value];


                                               NSURL *url = [NSURL URLWithString:newsItem.image];

                                               NSString *imageUrl = url.absoluteString;
                                             NSData *data = [NSData dataWithContentsOfURL:url];


                                               NewsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
                                             cell.image.layer.masksToBounds = YES;
                                               cell.Title.text = newsItem.title;
                                               cell.category.text = [newsItem.categories objectAtIndex:0];
                                               cell.subTitle.text = newsItem.subTitle;

                                               [cell.image sd_setImageWithURL:[NSURL URLWithString:imageUrl]
                                                            placeholderImage:[UIImage imageNamed:@"image.png"]];                          
                                               cell.image.contentMode = UIViewContentModeScaleAspectFill;
                                               [cell.image setFrame:CGRectMake(0,0,cell.frame.size.width,cell.frame.size.height)];

                                               cell.selectionStyle = UITableViewCellSelectionStyleNone;

                                               return cell;
                                           }];

[self.dataSource bindToView:self.tableView];
self.tableView.delegate = self;
}

2 个答案:

答案 0 :(得分:4)

从源代码中删除以下行,因为它会在您的tableview单元格中激活(每次重复使用单元格时)下载图像数据。另请注意,它可能会加载数据前景,这可能是滚动tableview时滞后的原因。

NSData *data = [NSData dataWithContentsOfURL:url];

以下代码处理您的tableview单元格的图像表示(在后台下载图像并使其在前景中可见)。因此,您的单元格中不需要上面的代码。

[cell.image sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:[UIImage imageNamed:@"image.png"]];

答案 1 :(得分:2)

你必须删除这一行

NSData *data = [NSData dataWithContentsOfURL:url];