IOS 图片下载存缓存沙盒
来源:互联网 发布:mac ftp下载工具 编辑:程序博客网 时间:2024/05/23 13:49
我们请求加载网络图片的时候,避免多次刷新加载,去下载图片。我们会把图片下载下来存了缓存跟沙盒里。来减少下载流量跟用户体验。
首先我们先定义一个类方法去下载图片Helpr类。先上代码在来解释 如:
我们定义一个类方法根据图片地址的
+(nullable UIImage *)setimageWithURL:(NSString *)url;
我们创建一个类方法中返回一个字典对象,做缓存。每次下载下来的图片存入这个字典里<span style="color:#ff0000;">+(NSMutableDictionary *)images;
</pre><p></p><pre>
+(UIImage *)setimageWithURL:(NSString *)url{</span>
//我们先去缓存字典里看看有没有图片 有图片就直接返回图片<span style="color:#cc0000;"> NSData *data=[Helpr images][url]; if (data) { return [UIImage imageWithData:data]; }
//没有图片我们就去沙盒里看看有没有我们保存的图片 有就直接返回图片 NSString *cachesPath=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; NSString *filename=[cachesPath stringByAppendingPathComponent:[url lastPathComponent]]; data=[NSData dataWithContentsOfFile:filename ]; if (!data) {
//沙盒里没有图片我们去下载图片 下载下来并保持到沙盒 跟缓存中 最好返回图片 data=[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]; if (data) {
[data writeToFile:filename atomically:YES]; [Helpr images][url]=data; } } return [UIImage imageWithData:data];}
+(NSMutableDictionary *)images{ static NSMutableDictionary *queue=nil; if (queue==nil) { queue=[NSMutableDictionary dictionaryWithCapacity:10]; } return queue;}
由于我们下载图片是一个耗时的工作 我们要把下载图片放在子线程中运行。我们一般也就ImgaeView跟Button按钮用到设置网络图片我们可以定义两个类方法;
//设置按钮的背景图片 占位图片<span style="color:#cc0000;">+(void)setButtonbgImageWithURL:( NSString *)url zhanweiImage:(nullable UIImage *)image btton:( UIButton *)btn;
+(void)setImageViewBgimageWithURL:( NSString *)url zhanweiImage:(nullable UIImage *)image imageView:( UIImageView *)imageView;
+(void)setButtonbgImageWithURL:(NSString *)url zhanweiImage:(UIImage *)image btton:(UIButton *)ban{
//首先我们先设置下按钮的背景占位图片
[btn setBackgroundImage:image];
//我们去开启一个线程来获取图片
dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ UIImage *image=[self setimageWithURL:url];
//我们在回到主线程去设置UI图片 dispatch_async(dispatch_get_main_queue(), ^{ [btn setBackgroundImage:image forState:0]; }); });}
#pragma mark---设置iamgeView的背景图片 占位图片+(void)setImageViewBgimageWithURL:(NSString *)url zhanweiImage:(UIImage *)image imageView:(UIImageView *)imageView{ [imageView setImage:image]; dispatch_queue_t queue=dispatch_queue_create("downimage", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ UIImage *image=[self setimageWithURL:url]; dispatch_async(dispatch_get_main_queue(), ^{ imageView.image=image; }); });}这样我们就简单的做了一个缓存图片的方法。对于网络请求做缓存 都可以以这个方法去做
当然我们也提空2个方法去清除沙盒的图片
<span style="color:#ff0000;">//删除图片+(void)removeimageWithURL:(NSString *)url;//删除所有图片+(void)removeAllimage;</span>
<span style="color:#ff0000;">#pragma mark---删除指定图片+(void)removeimageWithURL:(NSString *)url{ NSString *cachesPath=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; NSString *filename=[cachesPath stringByAppendingPathComponent:[url lastPathComponent]]; [[NSFileManager defaultManager]removeItemAtPath:filename error:nil];}#pragma mark----删除所有图片信息+(void)removeAllimage{ NSString *cachesPath=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; [[NSFileManager defaultManager]removeItemAtPath:cachesPath error:nil];}</span>
先去看看缓存空间里有没有。没有在去沙盒目录录有没有,也没有就去下载图片,吧下载的图片存入缓存跟沙盒就好.
0 0
- IOS 图片下载存缓存沙盒
- IOS 图片下载缓存模块 代码
- iOS开发- SDWebImage图片下载缓存
- 【ios 网络篇 3】 图片下载及缓存
- iOS开发------实现图片下载缓存到本地
- IOS 图片下载
- iOS 图片下载
- 详细讲解Android图片下载框架UniversialImageLoader之内存缓存(三)
- 详细讲解Android图片下载框架UniversialImageLoader之内存缓存扩展(四)
- 图片下载 缓存等问题
- 网络图片下载与缓存
- 图片下载之缓存
- Picasso 图片下载缓存库
- iOS开发之内存缓存机制
- iOS开发之内存缓存机制
- iOS开发之内存缓存机制
- iOS开发之内存缓存机制 .
- IOS开发(99)之内存缓存
- 二叉树的非递归实现(先,中,后)
- idea debug 启动速度超慢的可能原因
- iOS 自定义属性 attribute
- 沟通选择Cnskype for Business 还是 Lync
- 那些年我们刷过的算法题(排序)---有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序
- IOS 图片下载存缓存沙盒
- Spring AOP 实现原理
- 相遇
- Android内容提供者(二)创建自己的Provider
- C# time.ToString("yyyyMMddHH") "yyyyMMdd"TO--DateTime
- 关键子工程
- 如何在NSLog中输出结构体
- 批处理 cd /d %~dp0
- android --APK下载、安装、启动