将图像存储在缓存目标 c

Posted

技术标签:

【中文标题】将图像存储在缓存目标 c【英文标题】:Store image in cache Objective c 【发布时间】:2016-12-07 12:42:16 【问题描述】:

在 UITableviewcell 中,我有许多图像视图,它们将从 url 加载图像

我想将图像存储在缓存中,这样当我再次滚动时它不应该从 url 加载

我的代码是

UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
                [indicator startAnimating];
                [indicator setCenter:cell.image_VW.center];
                [cell.contentView addSubview:indicator];
NSString *url_STR = [NSString stringWithFormat:@"%@news/%@",IMAGE_URL,[tmp_NEWS valueForKey:@"image"]];              
NSString *url_STR = [NSString stringWithFormat:@"%@news/%@",IMAGE_URL,[tmp_NEWS valueForKey:@"image"]];                  
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
   //retrive image on global queue
   UIImage * img = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url_STR]]];
   dispatch_async(dispatch_get_main_queue(), ^
                     [indicator removeFromSuperview];
   NEWS_BIG_CELL * cell = (NEWS_BIG_CELL *)[self.tbl_CONTENTS cellForRowAtIndexPath:indexPath];
   //assign cell image on main thread
   //cell.image_VW.contentMode = UIViewContentModeScaleAspectFit;
            cell.image_VW.image = img;
   );
);

【问题讨论】:

使用 SDwebimageview, 【参考方案1】:

您应该使用 NSCache,您可以在其中按键保存图像并获取它们(如果它们存在于缓存中(按键),请参阅这个快速示例:

http://www.splinter.com.au/2015/09/24/swift-image-cache/

或使用:

https://github.com/rs/SDWebImage

【讨论】:

【参考方案2】:

对于简单的解决方案是SDWebImage 用于缓存图像gitHub 链接

在你的 UITableviewcell cellForRowAtIndexPath 方法中

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];

    [cell.image_VW sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
                 placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
    return cell;

【讨论】:

【参考方案3】:

首先需要检查dataWithContentsOfURL中的数据是否不为零,然后检查是否为真:

您可以将图像保存为 NSUserdefaults 中的 NSData,并将其 URL 作为该首选项的键 (setObject:(NSData) forKey:(URL as NSString)),这样下次,您可以检查缓存中是否存在任何数据,以便 URL 立即显示,而无需再次从 Internet 获取 (objectForKey:(URL as NSString))。

【讨论】:

意味着如果我有 n 个图像,NSUserdefaults 也会存储那么多数据...?

以上是关于将图像存储在缓存目标 c的主要内容,如果未能解决你的问题,请参考以下文章

如何将url图像存储在缓存中,然后在iphone的imageview中显示

如何在颤动中将资产图像存储在缓存中

React Native - 将图像从本地缓存发送到 Firebase 存储

如何事先获取将存储在 Android/Java 缓存中的未来 Glide 图像大小?

如何在angularjs中将图像存储到浏览器缓存中

将 LRU 图像缓存与 HTTPResponseCache 结合用于磁盘和内存缓存