1、在项目的开发过程中,我们经常会用到异步加载图片的功能,先从网络上异步下载图片,然后通过UIImageView显示在屏幕上。这是一个经常使用的功能,基本上所有的联网应用程序都要用到的功能,现在GitHub上已经有非常成熟的框架
1、SDWebImage提供了UIImageView的扩展类,只需要在头文件中加入文件引用
#import "UIImageView+WebCache.h"
异步加载图片方法:
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder;
默认情况下,SDWebImage会忽略Header中的缓存设置,将图片以url为key进行保存,url与图片是一一对应关系。所以请求同一个url时,SDWebImage会从缓存中取得图片。一般的情况下用此方法可以满足我们的应用要求,但是如果你请求同一个url,而这张图片在服务器端更新了,本地客户端再次请求时还是会返回缓存中的旧图片,例如加载头像类经常更新的图片时,就会出现头像不能更新的问题,由于url与图片一一对应,一种解决的办法是改变部分url地址方式实现更新,不过这种方法操作起来很复杂,下面介绍一个更方便的办法
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;
NSURL *url = [NSURL URLWithString:@"http://www.example.com/image.png"]; UIImage *defaultImage = [UIImage imageNamed:@"default.png"]; [self.imageView setImageWithURL:url placeholderImage:defaultImage options:SDWebImageRefreshCached];
1、缓存计算,这里的缓存计算,只计算SDWebImage的缓存,沙盒文件夹中的其它文件并不包括在内:
[SDWebImageManager.sharedManager.imageCache calculateSizeWithCompletionBlock:^(NSUInteger fileCount, NSUInteger totalSize) { }];
2、缓存清理
在SDWebImage中有两种缓存,一种是磁盘缓存,一种为内存缓存,框架都提供了相应的方法:
[[[SDWebImageManager sharedManager] imageCache] clearDisk]; [[[SDWebImageManager sharedManager] imageCache] clearMemory];
[[NSURLCache sharedURLCache] removeAllCachedResponses];