SDWebImage - 网络图片缓存
2016-05-03 本文已影响212人
居然是村长
https://github.com/rs/SDWebImage
14000 + star
1、对网络图片进行本地缓存,异步加载,优化图片获取必备,大家都说好。
2、首先对 url 图片进行判断本地是否存在,存在直接使用,不存在使用网络图片,并以url为key保存在本地(磁盘,内存)
3、保存磁盘的不清理会一直存在,而保存内存的可能会被系统清楚。
一般
- 1 最常用
// 一般都只用以下方法,就自动判断是否缓存而选择最优图片获取。
[imageView sd_setImageWithURL:[NSURL URLWithString:url2]
placeholderImage:[UIImage imageNamed:@"placeholderImage"]];
- 2 button 也可以
[button sd_setImageWithURL:[NSURL URLWithString:url2]
forState:UIControlStateNormal
placeholderImage:[UIImage imageNamed:@"placeholderImage"]];
自己判断缓存
- 1 内存中是否存在
UIImage *memoryImage = [[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:url1];
if (memoryImage) {
// do
}
- 2 整个缓存是否存在(先检查内存,然后检查磁盘)
UIImage *cacheImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:url1];
if (cacheImage) {
// do
}
清除缓存
- 1 获取缓存大小
NSInteger imageCacheByte = [[SDImageCache sharedImageCache] getSize];
NSLog(@"%zi",imageCacheByte);
[[SDImageCache sharedImageCache] calculateSizeWithCompletionBlock:^(NSUInteger fileCount, NSUInteger totalSize) {
NSLog(@"一共%zi个图片,共%fM",fileCount,totalSize/1024./1024.);
}];
- 2 清理(搞个进度条,不然清理太快了)
[[SDImageCache sharedImageCache] clearDisk];// 磁盘
[[SDImageCache sharedImageCache] clearMemory];// 内存
[[SDImageCache sharedImageCache] removeImageForKey:url1];// 单独清理
进度下载
- 1 一般下载
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadImageWithURL:[NSURL URLWithString:url2]
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// 如果有下载进度,可以跟踪
NSLog(@"%zi,%zi",receivedSize,expectedSize);
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (image) {
// do something with image
}
}];
- 2 异步下载
SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
[downloader downloadImageWithURL:[NSURL URLWithString:url2]
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// progression tracking code
}
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
if (image && finished) {
// do something with image
}
}];
强制刷新本地缓存
[imageView sd_setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"]
placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]
options:SDWebImageRefreshCached];
1