第三方库:SDWebImage简单使用

官方接口文档地址:http://cocoadocs.org/docsets/SDWebImage/3.8.1/

SDWebImage 提供了一个支持网络下载图片的UIImageView的分类,主要有以下功能:

  • 为Cocoa Touch框架提供一个UIImageView的分类,加载图片并进行缓存处理。
  • 异步图像下载
  • 异步存储器+具备自动缓存过期处理的磁盘映像缓存
  • 支持GIF播放
  • 支持WebP格式
  • 背景图像解压缩
  • 保证同一个url图片资源不被多次下载
  • 保证错误url不被反复尝试下载
  • 保证不会阻塞主线程
  • 高性能
  • 使用GCD和ARC
  • 支持Arm64架构

 

SDWebImage主要的类和类别:

  • SDWebImageManager :管理图片下载和缓存;
  • SDWebImageDownloader :负责图片的下载:
  • SDImageCache:负责图片缓存;
  • UIButton+WebCache :设置UIButton的图片
  • UIImageView+WebCache:设置UIImageView的图片;
  • NSData+ImageContentType:获取图片的类型,image/jpeg或者 image/gif

 

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];

    //2、执行下载,具体参数和上面的函数一致;
    [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

 

转载于:https://my.oschina.net/mexiaobai1315/blog/743087

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值