ios - 在缓存中,如何存储图像数据

  显示原文与译文双语对照的内容
0 0

如何在应用程序缓存中存储图像,并且可以以在没有网络连接的情况下将图像存储到 array 。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
 static NSString * CellIndentifier=@"CustomCell";
 CustomCell *cell = (CustomCell*)[collectionView dequeueReusableCellWithReuseIdentifier:CellIndentifier forIndexPath:indexPath];
 NSDictionary *dictVideo = [self.videoList objectAtIndex:indexPath.row];
 [cell.indicator startAnimating];
//set title
 NSString *titleVideo = [dictVideo objectForKey:@"Title"];
 [cell.myLabel setText:titleVideo];
//set image url
 NSString *urlVideo = [dictVideo objectForKey:@"Url"];
 NSURL *url = [NSURL URLWithString:urlVideo];
 cell.imageView.image = nil;
 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
 NSData *data = [NSData dataWithContentsOfURL:url];
 UIImage * img = [[UIImage alloc]initWithData:data];
 dispatch_sync(dispatch_get_main_queue(), ^{
 NSLog(@"%ld %@ %@",(long)indexPath.row,titleVideo,url);
 [cell.imageView setImage: img];
 [cell.indicator stopAnimating];
 });
 });
 return cell;
 }
时间:原作者:6个回答

0 0

NSURLCache已经为你做了这个。 你的应用程序已经经有一个可以能没有磁盘持久性的隐式 NSURLCache,因这里你希望显式设置它:

NSURLCache *cache = [[NSURLCache alloc]initWithMemoryCapacity:(5 * 1024 * 1024) diskCapacity:(10 * 1024 *1024) diskPath:@"NSURLCache.db"];
[NSURLCache setSharedURLCache:cache];

从那以后,URL加载系统将存储数据在内存和磁盘上。 这将允许它在没有连接的情况下可用。 你继续按照常规方式进行请求,当服务出现缓存时,它们就会更快地返回。

如果要修改这里行为,应修改 NSURLRequest ( 例如NSURLRequestReturnCacheDataElseLoad或者 NSURLRequestReturnCacheDataDontLoad ) 使用的缓存策略。 但是,你正在使用 dataWithContentsOfURL:,它不提供这样做的机会。 使用NSURLSessionTask或者NSURLConnection可以让你这样做。

请记住,服务器确实告诉客户端响应有效多长时间,默认缓存策略遵循。

原作者:
0 0

你可以以使用SDWebImage库作为 Umar in说,它对于 iOS 6和 7都可以以在. m 文件的代码下使用。

#import"UIImageView+WebCache.h"
 UIImage *Noimg = [UIImage imageNamed:@"noimg.png"];
 [cell.PlaceImg setImageWithURL:[NSURL URLWithString:strImgname] placeholderImage:Noimg];

这里Noimg是占位符图像,当图像位置没有图像时,它将被库自动管理

原作者:
...