我目前有一个tableView,可以显示任意数量的结果。每行都有一个从服务器中提取的图像。假设服务器速度很快并且设备具有可靠的连接,那么在滚动列表时如何减少延迟。
我看了在背景线程上加载图像,这肯定改善了一些东西,但是当你向上和向下滚动时你可以清楚地看到图像渲染。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if (tableView == self.searchDisplayController.searchResultsTableView)
{
cell.textLabel.text = [self.searchResult objectAtIndex:indexPath.row];
}
else
{
cell.textLabel.text = self.TableData[indexPath.row];
}
_ImageURL = self.ImageData[indexPath.row];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^
{
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:_ImageURL]]];
dispatch_sync(dispatch_get_main_queue(), ^
{
[[cell imageView] setImage:image];
[cell setNeedsLayout];
});
});
return cell;
}
是否有任何方法可以改善这种情况,或者更有可能是服务器速度和设备带宽的限制。我的服务器不是Facebook服务器,但它是一个体面的付费服务器,我用于其他应用程序。
此外,自从将图像移动到后台任务后,我注意到一行又一次会错过加载图像,对此有什么想法?
答案 0 :(得分:3)
我建议您使用SDWebImage
库,一切都将为您处理,从异步下载到缓存管理。
以下是 the link下载和文档。
如果您不需要图像缓存,也可以使用Facebook的 AsyncDisplayKit 。
祝你好运。