如何使用缓存并在objective-C中的tableviewcell中显示异步下载图像?

时间:2017-06-05 03:16:53

标签: ios objective-c uitableview

我正在尝试使用缓存并在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 -----

同样的兑现只是办法吗?如果是,请建议我如何实现这一点。

2 个答案:

答案 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"]];