SDWebImage

SDWebImage托管在github上。https://github.com/rs/SDWebImage

SDWebImage提供了如下三个category来进行缓存。 

常用操作:UIImageView+WebCache类

[imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/image.jpg"]];

使用SDWebImageManager类:可以进行一些异步加载的工作。

SDWebImageManager *manager = [SDWebImageManager sharedManager];
UIImage *cachedImage = [manager imageWithURL:url]; // 将需要缓存的图片加载进来
if (cachedImage) {
      // 如果Cache命中,则直接利用缓存的图片进行有关操作
      // Use the cached image immediatly
} else {
      // 如果Cache没有命中,则去下载指定网络位置的图片,并且给出一个委托方法
      // Start an async download
     [manager downloadWithURL:url delegate:self];
}
当然你的类要实现SDWebImageManagerDelegate协议,并且要实现协议的webImageManager:didFinishWithImage:方法。
// 当下载完成后,调用回调方法,使下载的图片显示
- (void)webImageManager:(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)image {
    // Do something with the downloaded image
}

 

独立的异步图像下载
可能会单独用到异步图片下载,则一定要用downloaderWithURL:delegate:来建立一个SDWebImageDownloader实例。
downloader = [SDWebImageDownloader downloaderWithURL:url delegate:self];
这样SDWebImageDownloaderDelegate协议的方法imageDownloader:didFinishWithImage:被调用时下载会立即开始并完成。

独立的异步图像缓存
SDImageCache类提供一个创建空缓存的实例,并用方法imageForKey:来寻找当前缓存。
UIImage *myCachedImage = [[SDImageCache sharedImageCache] imageFromKey:myCacheKey];

存储一个图像到缓存是使用方法storeImage: forKey:
[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey];
默认情况下,图像将被存储在内存缓存和磁盘缓存中。如果仅仅是想内存缓存中,要使用storeImage:forKey:toDisk:方法的第三个参数带一负值
来替代。

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     延迟显示占位图片

 

清除缓存:

[[SDImageCache sharedImageCache] clearDisk];

[[SDImageCache sharedImageCache] clearMemory];

例子:手动清楚缓存 
 
1.找到SDImageCache类 
2.添加如下方法: 
 

    - (float)checkTmpSize  
  1. {  
  2.     float totalSize = 0;  
  3.     NSDirectoryEnumerator *fileEnumerator = [[NSFileManager defaultManager] enumeratorAtPath:diskCachePath];  
  4.     for (NSString *fileName in fileEnumerator)  
  5.     {  
  6.         NSString *filePath = [diskCachePath stringByAppendingPathComponent:fileName];  
  7.         NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];  
  8.         unsigned long long length = [attrs fileSize];  
  9.         totalSize += length / 1024.0 / 1024.0;  
  10.     }  
  11. //    NSLog(@"tmp size is %.2f",totalSize); 
  12.     return totalSize;  
  13. }  

 
 
3.在设置里这样使用 
 

    #pragma 清理缓存图片 
  1. - (void)clearTmpPics  
  2. {  
  3.     [[SDImageCache sharedImageCache] clearDisk];  
  4. //    [[SDImageCache sharedImageCache] clearMemory];//可有可无 
  5.     DLog(@"clear disk");      
  6.     float tmpSize = [[SDImageCache sharedImageCache] checkTmpSize];  
  7.     NSString *clearCacheName = tmpSize >= 1 ? [NSString stringWithFormat:@"清理缓存(%.2fM)",tmpSize] : [NSString stringWithFormat:@"清理缓存(%.2fK)",tmpSize * 1024];  
  8.     [configDataArray replaceObjectAtIndex:2 withObject:clearCacheName];  
  9.     [configTableView reloadData];  
  10. }   

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。