博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS UIImage DownLoad图片的下载缓存全部在此
阅读量:5842 次
发布时间:2019-06-18

本文共 4359 字,大约阅读时间需要 14 分钟。

iOS图片的下载缓存全部在此分类: iOS编程 2012-11-03 21:15 2075人阅读 评论(2) 收藏 举报注意: 我的文章只写给自己看----------------------------------------------------------------------------------------(一)这部分(感觉out了), 但是还是保留,  算是学习的痕迹.----------------------------------------------------------------------------------------(1)最简单的下载,显示图片的方法: [plain] view plaincopy   UIImageView *imageView = [[UIImageView alloc] initWithFrame:[self.view bounds]];     imageView.image = [self loadImageFromUrl:@"http://storage.live.com/items/72A00BF5A838647C!1616?filename=meinv004.jpg"];     [self.view addSubview:imageView];          -(UIImage*)loadImageFromUrl: (NSString*)url  {      NSURL  *imageUrl = [NSURL URLWithString:url];      NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];      UIImage *image = [UIImage imageWithData:imageData];      return image;  }      这种最简单的图片加载方式阻塞了main线程. 使得流程不能流畅进行.(2)开辟线程来解决这个问题.[plain] view plaincopy   // set imageview     UIImageView *imageView = [[UIImageView alloc] initWithFrame:[self.view bounds]];     imageView.backgroundColor = [UIColor yellowColor];     imageView.tag = imageView_tag;     [self.view addSubview:imageView];          // load image in background     NSString *url = IMAGE_URL;     [self performSelectorInBackground:@selector(loadImageFromUrl:) withObject:url];           -(void)loadImageFromUrl: (NSString*)url {      NSURL  *imageUrl = [NSURL URLWithString:url];      NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];      [self performSelectorOnMainThread:@selector(updateImageView:) withObject:imageData waitUntilDone:NO];  }  -(void) updateImageView:(NSData*) data {      UIImageView *imageView = (UIImageView *)[self.view viewWithTag:imageView_tag];      imageView.image = [UIImage imageWithData:data];  }  并且只能在main线程中设置UI的内容, 所以代码量增加了较多. 代码量暂且不管, 这里还有一个比较严重的问题就是每次都要加载图片, 使用SDWebImage: [plain] view plaincopy#import 
[imageView setImageWithURL:[NSURL URLWithString:[_objects objectAtIndex:indexPath.row]] placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; SDWebImage可以实现: *下载和缓存图片.*相同的url不会被重复下载.*坏的url不会一直请求.使用HJCache:[plain] view plaincopy// 目前HJCache不支持ARC, 所以这是个问题. -----------------------------------------------------------------------------------------------------------------(二)多线程初步实现TableView的图片显示(之前用第三库老是不稳定) 这个算是比较满意的.------------------------------------------------------------------------------------------------------------------------[plain] view plaincopy@interface c:NSOperation @property NSString *url; @property NSString *imageName; @property UIImage *image; @property UIImageView *delegate; -(void) main; -(id) initWith:(NSString *)url imageName:(NSString *)imageName delegate:(UIImageView *)delegate; @end @implementation c:NSOperation @synthesize url = _url,imageName=_imageName, image=_image, delegate=_delegate; -(id) initWith:(NSString *)url imageName:(NSString *)imageName delegate:(UIImageView *)delegate{ if (self = [super init]) { self.url = url; self.imageName = imageName; self.delegate = delegate; } return self; } -(void) main{ // NSString *cachefile = [NSTemporaryDirectory() stringByAppendingPathComponent: self.imageName]; NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.url]]; [data writeToFile:cachefile atomically:YES]; // self.image = [UIImage imageWithData:data]; [self performSelectorOnMainThread:@selector(u) withObject:nil waitUntilDone:NO]; } -(void)u{ [self.delegate setImage:self.image]; } [plain] view plaincopyqueue = [[NSOperationQueue alloc] init];//这是成员队列的实例化 设置TableView cell中的图片:[plain] view plaincopyNSString *filename = [NSString stringWithFormat:@"%d", indexPath.row]; NSString *cachefile = [NSTemporaryDirectory() stringByAppendingPathComponent: filename]; UIImage *image = [UIImage imageWithContentsOfFile:cachefile]; if (image) { cell.imageView.image = image; } else { c *o = [[c alloc] initWith:[_objects objectAtIndex:indexPath.row] imageName:[NSString stringWithFormat:@"%d",indexPath.row] delegate:cell.imageView]; [queue addOperation:o]; cell.imageView.image= [UIImage imageNamed:@"placeholder.png"]; } 注: 保存一下测试图片 urls

http://blog.csdn.net/deep_explore/article/details/8144613

原网址

转载于:https://www.cnblogs.com/someonelikeyou/p/3467845.html

你可能感兴趣的文章
Windows 10 TH2改进
查看>>
谷歌 Chrome Dev Tools 浅析 – 成为更高效的 Developer
查看>>
Angular和Vue.js 深度对比
查看>>
awk数组命令经典生产实战应用拓展
查看>>
你看得懂的CSMA介质访问控制原理
查看>>
SCVMM 2012 R2---添加Hyper-V虚拟机
查看>>
全局与接口的BPDU Guard功能是有重大区别的
查看>>
为域用户创建漫游用户配置文件
查看>>
Skype for Business Server 2015-01-基础环境-准备
查看>>
OneProxy中间件生产使用经验视频分享
查看>>
慢查询日志分析工具mysqldumpslow
查看>>
烂泥:nagios监控单网卡双IP
查看>>
selenium自动化测试框架之PO设计模式
查看>>
如何使用虚拟实验室建设思科IPS***防御课程的实验环境
查看>>
运维自动化之ansible playbook安装mysql
查看>>
王通:网络营销人才必备的10种技能
查看>>
Android 中 View的类关系图
查看>>
WorkStation9完美支持Win8
查看>>
Android简明开发教程十六:Button 画刷示例
查看>>
perl--CGI编程之Apache服务器安装配置
查看>>