SDWebImage源代码

SDWebImage 简介

1.提供了一个UIImageView的category用来加载网络图片并且对网络图片的缓存进行管理

2.采用异步方式来下载网络图片

3.采用异步方式,使用memory+disk来缓存网络图片,自动管理缓存

4.支持GIF动画

5.支持WebP格式

6.同一个URL的网络图片不会被重复下载

7.失效的URL不会被无限重试

8.耗时操作都在子线程,确保不会阻塞主线程

9.使用GCD和ARC

10.支持Arm64

SDWebImage 使用

1.使用IImageView+WebCache category来加载一张远程图片

let url = URL(string: "http://f.hiphotos.baidu.com/image/h%3D200/sign=1e6c01ac9b13b07ea2bd57083cd69113/5fdf8db1cb134954ecbd6ee95e4e9258d0094a98.jpg")

imageV.sd_setImage(with: url)

2.加载一张远程图片,在未完成加载时预留一张图片

let placeholderImage = UIImage(named: "placeholderImage.png")

imageV.sd_setImage(with: url, placeholderImage: placeholderImage)

3.加载一张远程图片,加载完成是执行某些操作


imageV.sd_setImage(with: url) { (image, error, SDImageCacheTypeNone, url) in

print("OK")

}

SDWebImage 流程


SDWebImage源代码_第1张图片

下载选项

typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) {

SDWebImageDownloaderLowPriority = 1 << 0,

SDWebImageDownloaderProgressiveDownload = 1 << 1,

/**

* By default, request prevent the use of NSURLCache. With this flag, NSURLCache

* is used with default policies.

*/

SDWebImageDownloaderUseNSURLCache = 1 << 2,

/**

* Call completion block with nil image/imageData if the image was read from NSURLCache

* (to be combined with `SDWebImageDownloaderUseNSURLCache`).

*/

SDWebImageDownloaderIgnoreCachedResponse = 1 << 3,

/**

* In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for

* extra time in background to let the request finish. If the background task expires the operation will be cancelled.

*/

SDWebImageDownloaderContinueInBackground = 1 << 4,

/**

* Handles cookies stored in NSHTTPCookieStore by setting

* NSMutableURLRequest.HTTPShouldHandleCookies = YES;

*/

SDWebImageDownloaderHandleCookies = 1 << 5,

/**

* Enable to allow untrusted SSL certificates.

* Useful for testing purposes. Use with caution in production.

*/

SDWebImageDownloaderAllowInvalidSSLCertificates = 1 << 6,

/**

* Put the image in the high priority queue.

*/

SDWebImageDownloaderHighPriority = 1 << 7,

};

可以看出,这些选项主要涉及到下载的优先级、缓存、后台任务执行、cookie处理以认证几个方面。

缓存

为了减少网络流量的消耗,我们都希望下载下来的图片缓存到本地,下次再去获取同一张图片时,可以直接从本地获取,而不再从远程服务器获取。这样做的另一个好处是提升了用户体验,用户第二次查看同一幅图片时,能快速从本地获取图片直接呈现给用户。

SDWebImage提供了对图片缓存的支持,而该功能是由SDImageCache类来完成的。该类负责处理内存缓存及一个可选的磁盘缓存。其中磁盘缓存的写操作是异步的,这样就不会对UI操作造成影响。

查询图片

- (UIImage *)imageFromMemoryCacheForKey:(NSString *)key;

- (UIImage *)imageFromDiskCacheForKey:(NSString *)key;

移除图片

- (void)removeImageForKey:(NSString *)key;

- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion;

- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk;

- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion;

清空缓存图片

- (void)clearMemory;

清空磁盘

- (void)clearDisk;

- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion;

清理磁盘

删除无效过期的图片

- (void)cleanDisk;

- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock;

你可能感兴趣的:(SDWebImage源代码)