我正在尝试使用缓存并在objective-C中的tableviewcell中显示异步下载图像。图片来自网址。我已经使用NSSession编写了API调用并使用GCD进行后台调用,但在这种情况下,图像在滚动时再次下载。我想只下载一次图像。
//------------ using GCD ---------
if(![imageUrlString isKindOfClass:[NSNull class]]){
dispatch_async(dispatch_get_global_queue(0,0), ^{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrlString]];
if ( data == nil )
return;
dispatch_async(dispatch_get_main_queue(), ^{
// WARNING: is the cell still using the same data by this point??
cell.imageView.image = [UIImage imageWithData: data];
});
});
}
//------------ using GCD -----
同样的兑现只是办法吗?如果是,请建议我如何实现这一点。
答案 0 :(得分:0)
在开发过程中,如果我们有合适的工具和库,我们不会麻烦。因为我们必须在这方面花更多的时间。
SDWebimage是一个很棒的图书馆,可以满足您的要求。您不必考虑所有情况。它已经为你完成了。
举个例子:
imageView.sd_setImage(with: URL(string: "your domain name"), placeholderImage: UIImage(named: "placeholder.png"))
你只需要在cellForRowAtIndexPath中写这一行。 :) 此库中还有许多功能。 快乐的编码。
答案 1 :(得分:0)
尝试SDWedImage
[[SDWebImageManager sharedManager]downloadImageWithURL:[NSURL URLWithString:imageurl] options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
cell.imageView.image = image; // if you want resize your image and any other operation can do here.
}];
或强>
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:imageurl]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];