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