官方接口文档地址:http://cocoadocs.org/docsets/SDWebImage/3.8.1/缓存
SDWebImage 提供了一个支持网络下载图片的UIImageView的分类,主要有如下功能:服务器
SDWebImage主要的类和类别:网络
UIImageView+WebCache 基本使用
//导入头文件:#import "UIImageView+WebCache.h" /** * 如下方法中,程序会异步下载图片,并自动缓存到内存和本地; */ /** * 方法1:sd_setImageWithURL:url placeholderImage:image * url: 图片地址 * image:图片没有下载时显示的占位图片 */ [self.imageView sd_setImageWithURL:url placeholderImage:image]; /** * 方法2:带下载进度和结束处理的block * url: 图片地址 * image:图片没有下载时显示的占位图片 * options:图片下选项 * progress:能够在这设置图片下载进度的显示, receivedSize:已接收大小;expectedSize:图片总大小; * completed:图片下载完成的处理,image:下载的图片;error:错误码; * cacheType:缓存的类型 SDImageCacheTypeNone:没有使用缓存,图片是直接下载的 SDImageCacheTypeDisk:磁盘缓存 SDImageCacheTypeMemory:内存缓存 缓存处理:内存缓存+磁盘缓存 * imageURL:图片的url */ [self.imageView sd_setImageWithURL:url placeholderImage:image options:SDWebImageLowPriority progress:^(NSInteger receivedSize, NSInteger expectedSize) { //设置进度条 [self.progressView setProgress:(1.0 * receivedSize / expectedSize)]; } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { }]; //取消当前图片下载 - (void)sd_cancelCurrentImageLoad - (void)sd_cancelCurrentAnimationImagesLoad //获取当前图片URL - (NSURL *)sd_imageURL //下载一组图片,而且以动画的形式展示 - (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs //是否显示等待菊花 - (void)setShowActivityIndicatorView:(BOOL)show //菊花的类型 - (void)setIndicatorStyle:(UIActivityIndicatorViewStyle)style
SDWebImageManager
DWebImageManager负责图片的缓存和下载,其余分类下载图片也是调用的这个类;架构
//头文件: "SDWebImageManager.h" //属性: @property (weak, nonatomic) id <SDWebImageManagerDelegate> delegate; //代理 @property (strong, nonatomic, readonly) SDImageCache *imageCache; //图片缓存管理 @property (strong, nonatomic, readonly) SDWebImageDownloader *imageDownloader; //图片下载 @property (nonatomic, copy) SDWebImageCacheKeyFilterBlock cacheKeyFilter; //将图片的URL变成缓存图片的关键字 [[SDWebImageManager sharedManager] setCacheKeyFilter:^(NSURL *url) { url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path]; return [url absoluteString]; }]; //方法: // + (SDWebImageManager *)sharedManager; //单例方法 SDWebImageManager *mamager = [SDWebImageManager sharedManager]; //二、执行下载,具体参数和上面的函数一致; [mamager downloadImageWithURL:url options:SDWebImageLowPriority progress:^(NSInteger receivedSize, NSInteger expectedSize) { } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { }]; //根据URL返回缓存图片的键值 - (NSString *)cacheKeyForURL:(NSURL *)url //判断图片是否已经被缓存 - (BOOL)cachedImageExistsForURL:(NSURL *)url //异步检查图片是否已经缓存,completionBlock一般在主线程中执行 - (void)cachedImageExistsForURL:(NSURL *)url completion:(SDWebImageCheckCacheCompletionBlock)completionBlock //根据URL缓存图片 - (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url; //取消全部当前操做 - (void)cancelAll //检查是否已经缓存在本地 - (BOOL)diskImageExistsForURL:(NSURL *)url //异步检查图片是否已经缓存在本地 - (void)diskImageExistsForURL:(NSURL *)url completion:(SDWebImageCheckCacheCompletionBlock)completionBlock //是否有操做在运行 - (BOOL)isRunning
SDWebImageManagerDelegate
//返回YES:当图片不存在于缓存中时,根据图片URL下载图片; //返回NO:当图片不存在于缓存中时,不下载图片; - (BOOL)imageManager:(SDWebImageManager *)imageManager shouldDownloadImageForURL:(NSURL *)imageURL // 图片下载以后,当即进行转换,而后再存入缓存中。注:必须在全局队列中执行; // - (UIImage *)imageManager:(SDWebImageManager *)imageManager transformDownloadedImage:(UIImage *)image withURL:(NSURL *)imageURL
SDImageCache
SDImageCache维护内存管理和可选的磁盘管理;写磁盘缓存操做是异步执行的,不会影响UI;并发
属性: //图片在内存中保存的最大时间,单位:秒 @property (assign, nonatomic) NSInteger maxCacheAge //在内存中可以存储图片的最大容量,单位:字节 @property (assign, nonatomic) NSUInteger maxCacheSize //保存在存储器中像素的总和 @property (assign, nonatomic) NSUInteger maxMemoryCost //内存中能缓存对象的最大个数 @property (assign, nonatomic) NSUInteger maxMemoryCountLimit //是否使用内存缓存,默认是YES @property (assign, nonatomic) BOOL shouldCacheImagesInMemory //将下载的图片解压而且缓存能够提升性能,同时也会消耗一些内存。默认是YES. //若是有内存消耗致使崩溃的现象,设成NO; @property (assign, nonatomic) BOOL shouldDecompressImages //禁止云备份,默认是YES; @property (assign, nonatomic) BOOL shouldDisableiCloud
类方法: + (SDImageCache *)sharedImageCache 实例方法: //添加只读的缓存路径查找SDImageCache预先缓存的图片。若是你想在APP绑定预加载图片,这个函数会有帮助; - (void)addReadOnlyCachePath:(NSString *)path //经过键值获取缓存路径, //path:缓存路径的根目录 - (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path Discussion //异步计算磁盘缓存的大小 - (void)calculateSizeWithCompletionBlock:(SDWebImageCalculateSizeBlock)completionBlock Discussion //清理全部!!过时的 !!磁盘缓存 - (void)cleanDisk //清理全部!!过时的 !!磁盘缓存,block为空时,函数会马上返回, - (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock //清理全部磁盘缓存图片,不分过时不过时; - (void)clearDisk //清理全部磁盘缓存图片,不分过时不过时;block为空时,函数会马上返回, - (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion Discussion //清理全部内存缓存 - (void)clearMemory //获取制定键值默认的缓存路径 - (NSString *)defaultCachePathForKey:(NSString *)key //检查图片是否已经缓存在磁盘上; - (BOOL)diskImageExistsWithKey:(NSString *)key //异步检查图片是否已经缓存在磁盘上, completion block必须在主队列执行; - (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock //获取磁盘缓存的图片的数量 - (NSUInteger)getDiskCount //获取用做磁盘缓存的大小 - (NSUInteger)getSize //根据键值查找图片,先在内存缓存中找,而后再磁盘中找 - (UIImage *)imageFromDiskCacheForKey:(NSString *)key Query the disk cache synchronously after checking the memory cache. //在内存缓存中查找图片 - (UIImage *)imageFromMemoryCacheForKey:(NSString *)key //根据命名空间初始化一个新的缓存存储空间, - (id)initWithNamespace:(NSString *)ns //根据命名空间和缓存路径初始化一个新的缓存存储空间, - (id)initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString *)directory //根据路径建立磁盘缓存目录 - (NSString *)makeDiskCachePath:(NSString *)fullNamespace //异步查询磁盘缓存 - (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock //移除内存和磁盘中键值对应的图片 - (void)removeImageForKey:(NSString *)key //异步删除内存和磁盘中的图片,磁盘删除是可选的; - (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk //异步删除内存和磁盘中的图片,磁盘删除是可选的,带completion block - (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion //异步删除内存和磁盘中的图片,带completion block - (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion //根据键值将图片存储在内存和磁盘中; - (void)storeImage:(UIImage *)image forKey:(NSString *)key //根据键值将图片存储在内存和磁盘中,磁盘存储是可选的; - (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk //根据键值将图片存储在内存和磁盘中,磁盘存储是可选的; //recalculate:直接使用imageData仍是从image中获取; //imageData:服务器返回的数据,将会用做磁盘存储;为了节约性能和CPU,一般不会将image转换成可存储、压缩过的图片格式; - (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk //缓存图片数据到本地磁盘 - (void)storeImageDataToDisk:(NSData *)imageData forKey:(NSString *)key
SDWebImageDownloader
//属性 // 当前须要下载的数量 @property (readonly, nonatomic) NSUInteger currentDownloadCount //下载超时时间,默认15S @property (assign, nonatomic) NSTimeInterval downloadTimeout //下载队列操做顺序,默认是SDWebImageDownloaderFIFOExecutionOrder @property (assign, nonatomic) SDWebImageDownloaderExecutionOrder executionOrder //获取下载图片的HTTP请求的请求头; @property (nonatomic, copy) SDWebImageDownloaderHeadersFilterBlock headersFilter //最大并发下载数; @property (assign, nonatomic) NSInteger maxConcurrentDownloads //密码 @property (strong, nonatomic) NSString *password //对下载的图片压缩并缓存能够提升性能,同时也会消耗内存。默认是YES; //若是内存消耗过多引发崩溃,设成NO; @property (assign, nonatomic) BOOL shouldDecompressImages //URL请求的证书 @property (strong, nonatomic) NSURLCredential *urlCredential //用户名 @property (strong, nonatomic) NSString *username
//类方法 + (SDWebImageDownloader *)sharedDownloader Discussion //实例方法 //取消队列中全部下载操做 - (void)cancelAllDownloads //根据URL建立异步下载 - (id<SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageDownloaderCompletedBlock)completedBlock Discussion //建立下载队列 - (void)setOperationClass:(Class)operationClass Sets a subclass of SDWebImageDownloaderOperation as the default NSOperation to be used each time SDWebImage constructs a request operation to download an image. //暂停下载 - (void)setSuspended:(BOOL)suspended Discussion //为每个http请求添加http请求头 - (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field //http请求头数据 - (NSString *)valueForHTTPHeaderField:(NSString *)field