可以在https://github.com/rs/SDWebImage这个网站上下载SDWebImage开源包,加到我们的工程中。command+b一下会有8个错误,这时候我们导入MapKit.framework、ImageIO.framework两个框架就好了。然后#import "UIImageView+WebCache.h"一下就OK了。UIImageView+WebCache类是对UIImageView的扩展,所以这个类里的方法直接可以你所创建的UIImageView的对象调用。我们在网上找一个图片点右键复制它的网址。
使用- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder success:(void (^)(UIImage *image))success failure:(void (^)(NSError *error))failure;方法,简单的下载一个图片它会自己做缓存。
代码如下:
[imageView setImageWithURL:[NSURL URLWithString:@"http://www.fzlol.com/upimg/allimg/120819/2021144O91.jpg"] placeholderImage:[UIImage imageNamed:@"有种想念叫做避而不见.jpg"] success:^(UIImage *image){} failure:^(NSError *error){} ];
为了检查一下它有没有做缓存,我们用NSLog(@"%@",NSHomeDirectory());输出下这个程序的沙盒路径。桌面上的Finder图标,桌面的左上角的菜单栏有前往,用鼠标点一下前往,按alt键会出前往下面会多一个选项资源库。打开资源库按照打印的路径找到沙盒文件夹,打开Library,再打开Caches文件夹,会发现imageCache文件夹。打开它后会发现一文件,双击打开就是我们下载的图片。
简单的研究就到这里啦~~~~简单的Demo可以提供下载网址如下(欢迎下载):
http://dl.vmall.com/c08aaaw651
加载网络图片可以说是网络应用中必备的。如果单纯的去下载图片,而不去做多线程、缓存等技术去优化,加载图片时的效果与用户体验就会很差。
一、自己实现加载图片的方法
tips:
*
iOS
中所有网络访问都是异步的
.(
自己
开线程去下载
)
*
普通
为
模型
增加
UIImage
属性
的方法做的是
内存缓存
(
下次启动还需要从网络重新加载
)
,
而要做本地缓存的话
,
还要自己手动
存储网络上下载的图片
.
*
为了加快访问
,
还需要自己去弄
缓存
.
(
内存缓存或者本地缓存
)
*
当图片没有下载完成时,还要设置
占位图片
。
以下代码用NSOperation开异步线程下载图片,当下载完成时替换占位图片。
二、使用第三方框架SDWebImage。(非常优秀)
*
特点
:
依赖的库很少
.功能全面。
*
自动实现
磁盘缓存
:
*
缓存图片名字是以
MD5
进行加密的
后的名字进行命名
.(
因为加密那堆字串是唯一的
)
*
[imageView
sd_setImageWithURL
:v.fullImageURL
placeholderImage:[UIImage
imageNamed:@”xxxxx”]].
*
就一个方法就实现了
多线程
\
带缓冲等效
果
.
(
可用带参数的方法
,
具体可看头文件
)
用SDWebImage修改上面的方法后的代码可简化为:
SDWebImage中的一些参数:
*
SDWebImageRetryFailed = 1<< 0,
默认选项,失败后重试
*
SDWebImageLowPriority = 1<< 1,
使用低优先级
*
SDWebImageCacheMemoryOnly = 1<< 2,
仅仅使用内存缓存
*
SDWebImageProgressiveDownload = 1<< 3,
显示现在进度
*
SDWebImageRefreshCached = 1<< 4,
刷新缓存
*
SDWebImageContinueInBackground =1 << 5,
后台继续下载图像
*
SDWebImageHandleCookies = 1<< 6,
处理
Cookie
*
SDWebImageAllowInvalidSSLCertificates= 1 << 7,
允许无效的
SSL
验证
*
SDWebImageHighPriority = 1<< 8,
高优先级
*
SDWebImageDelayPlaceholder = 1<< 9
延迟显示占位图片