SDWebImage 简单使用

SDWebImage下载图片

1.快速使用

#import 包含头文件,或者放在pch文件里
初始化一个UIImageView之后;

//默认会从缓存取,没有在从网络加载
[self.imageView sd_setImageWithURL:self.imageUrl placeholderImage:nil options:SDWebImageProgressiveLoad   context:nil progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
        NSLog(@"%lu",receivedSize/expectedSize);//进度
    } completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
        if (image){
            //完成之后对图片的处理
        }
    }];

/*参数依次是
1.图片的url
2.默认图片
3.选项SDWebImageOptions
4.context
5.下载进度
6.完成block
*/
主要是这个方法,其他的都是对这个的分装

- (void)sd_setImageWithURL:(nullable NSURL *)url {
    [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil];
}
- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder {
    [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil];
}
- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options {
    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil];
}

- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context {
    [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:context progress:nil completed:nil];
}

- (void)sd_setImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock {
    [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock];
}

- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder completed:(nullable SDExternalCompletionBlock)completedBlock {
    [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock];
}

- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock {
    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock];
}

- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock {
    [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:nil progress:progressBlock completed:completedBlock];
}

2. SDWebImageManager

SDWebImageManager是管理整个框架的类
@property (nonatomic, class, readonly, nonnull) SDWebImageManager *sharedManager;
属性里面的class关键字,会生产+开头的get,set方法,但是没有实例变量。上面代码有readonly修饰,就只有get方法
下面这两行代码结果是一样的(.语法本质就是调用该属性的get方法)
用sharedManager属性,会产生SDWebImage默认的单例

SDWebImageManager.sharedManager 
[SDWebImageManager sharedManager] 

自定义初始化

//默认会从缓存取,没有在从网络加载
- (nonnull instancetype)initWithCache:(nonnull id)cache loader:(nonnull id)loader;

下载图片

- (SDWebImageCombinedOperation *)loadImageWithURL:(nullable NSURL *)url
                                          options:(SDWebImageOptions)options
                                          context:(nullable SDWebImageContext *)context
                                         progress:(nullable SDImageLoaderProgressBlock)progressBlock
                                        completed:(nonnull SDInternalCompletionBlock)completedBlock 

1.参数url 图片的url
2.参数options 选项(枚举后文)
3.参数context
4.progress下载进度block ,(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL)已下载size,总的size,图片url
5.completed完成block(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL)图片对象image,(NSData *)data,error错误信息,缓存类型,完成状态,图片url

- (SDWebImageCombinedOperation *)loadImageWithURL:(NSURL *)url 
                                          options:(SDWebImageOptions)options 
                                         progress:(SDImageLoaderProgressBlock)progressBlock 
                                        completed:(SDInternalCompletionBlock)completedBlock

是对第一个方法的封装

- (void)cancelAll;取消所有下载任务

[SDWebImageManager.sharedManager cancelAll];

SDWebImageOptions枚举

SDWebImageRetryFailed如果下载失败,url不会被加入黑名单,SDWebImage还是会再次尝试下载

SDWebImageLowPriority 在你交互的时候(手指还在滑动屏幕)图片不会下载,交互完了(手机离开屏幕)就会下载
SDWebImageProgressiveLoad边下载边显示图片,直到下载完成全部显示
SDWebImageRefreshCached一个图片缓存了,还是会重新请求.并且缓存侧略依据NSURLCache而不是SDWebImageCache
SDWebImageContinueInBackground在后台下载
SDWebImageHandleCookies 可以控制存在NSHTTPCookieStore的cookies.
SDWebImageAllowInvalidSSLCertificates 允许不安全的SSL证书
SDWebImageHighPriority 默认情况下,image在装载的时候是按照他们在队列中的顺序装载的(就是先进先出).这个flag会把他们移动到队列的前端,并且立刻装载,而不是等到当前队列装载的时候再装载.
SDWebImageDelayPlaceholder默认情况下,占位图会在图片下载的时候显示.这个flag开启会延迟占位图显示的时间,等到图片下载完成之后才会显示占位图.
SDWebImageTransformAnimatedImage
SDWebImageAvoidAutoSetImage默认情况下,图片是在下载完成后加载到图片视图。但是在一些情况下,我们想要在设置图片之前进行图片处理(比如,提供一个过滤或添加一个折叠动画)。使用这个标志,如果你想在下载成功后在完成块中手动设置图片。
SDWebImageScaleDownLargeImages默认情况下,图片解码为原始的大小。在iOS,这个标志会把图片缩小到与设备的受限内容相兼容的大小。如果设置了SDWebImageProgressDownload标志,那么缩小被设置为无效。
SDWebImageQueryMemoryData默认情况下,当图像已经缓存到内存中时,我们不会查询图像数据。该掩码可以强制同时查询图像数据。但是,除非指定“SDWebImageQueryMemoryDataSync”,否则此查询是异步的。
SDWebImageQueryMemoryDataSync默认情况下,当您只指定“SDWebImageQueryMemoryData”时,我们异步地查询内存图像数据。结合该掩码还可以同步查询内存图像数据。
SDWebImageQueryDiskDataSync默认情况下,当内存缓存丢失时,我们异步地查询磁盘缓存。这个掩码可以强制同步查询磁盘缓存(当内存缓存丢失时)。
SDWebImageFromCacheOnly默认情况下,当缓存丢失时,映像将从加载器加载。此标志仅能防止从缓存加载。
SDWebImageFromLoaderOnly和上一个相反, 默认情况下,我们在从加载器加载映像之前查询缓存。此标志仅能阻止从加载器加载。
SDWebImageForceTransition默认情况下,当您使用“SDWebImageTransition”在图像加载完成后进行一些视图转换时,此转换仅应用于从网络下载图像。这个掩码还可以强制为内存和磁盘缓存应用视图转换。
SDWebImageAvoidDecodeImage默认情况下,我们将在缓存查询和从网络下载时解码后台图像。这有助于提高性能,因为在屏幕上呈现图像时,首先需要解码。但这发生在Core Animation的主队列上。
然而,这个过程也可能增加内存使用量。如果您正在经历一个问题,由于过多的内存消耗,这个标志可以防止解码图像。
SDWebImageDecodeFirstFrameOnly默认情况下,我们解码动画图像。此标志仅能强制解码第一帧并生成静态图像。
SDWebImagePreloadAllFrames默认情况下,对于“SDAnimatedImage”,我们在渲染时解码动画图像帧,以减少内存使用。但是,当大量imageViews共享动画图像时,可以指定将所有帧预加载到内存中,以减少CPU使用。这将在后台队列中触发“preloadAllAnimatedImageFrames”(仅限磁盘缓存和下载)。

3.使用SDWebImageDownloader

 SDWebImageDownloader *download=[SDWebImageDownloader sharedDownloader];
不会缓存图片,如果要想缓存需要手动缓存
 [download downloadImageWithURL:self.imageUrl options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
    } completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {
    }];

你可能感兴趣的:(SDWebImage 简单使用)