将图像存储在缓存目标 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 存储