根据这个文章写出来的简单应用,http://www.cocoachina.com/ios/20141212/10622.html
SDWebImage是图片下载的第三方类库,能非常方面的加载图片,具体原理是:加载的图片会以data的格式保存在缓存里,如果再加载图片的时候会首先先从缓冲中寻找有没有该图片,如果有就用缓存的,如果没有就加载保存在缓存里.
图片保存的文件夹为:
首先把头文件引入,并声明一个图片的宏
#import "UIImageView+WebCache.h"
#define kImageUrl @"http://img3.douban.com/view/event_poster/median/public/10f53a2ad8b38c5.jpg"
1.简单的图片缓存
- (void)addUIImageView1
{
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 200, 300)];
NSURL *url = [NSURL URLWithString:kImageUrl];
// 图片缓存
[imageView sd_setImageWithURL:url];
[self.view addSubview:imageView];
}
2.先使用占位图,加载之后再显示
- (void)addUIImageView2
{
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 200, 300)];
NSURL *url = [NSURL URLWithString:kImageUrl];
// 先使用默认图片当加载完之后才显示
[imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder"]];
[self.view addSubview:imageView];
}
3.用block和占位符,可以在加载后进行一些操作
- (void)addUIImageView3
{
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 200, 300)];
NSURL *url = [NSURL URLWithString:kImageUrl];
// 用block和默认图片在完成后做一些事情
[imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
NSLog(@"使用了block和占位符号");
}];
[self.view addSubview:imageView];
}
4.选择加载方式,option表示选择方式
- (void)addUIImageView4
{
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 200, 300)];
NSURL *url = [NSURL URLWithString:kImageUrl];
// option选择方式,SDWebImageRetryFailed表示失败后重试
[imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder"] options:SDWebImageRetryFailed];
[self.view addSubview:imageView];
}
最后如果要清除缓存可以使用下面的方法,能把文件夹的图片删除
[[SDImageCache sharedImageCache] clearDisk];
图片加载也可以用在tableView的cell上面,根据需要选择不同的上述用法,用SDWebImage能非常方面的加载图片.具体的内部实现可以参考我链接的那篇文章.