SDWebImage源码阅读(二)--SDWebImageMan

2019-03-26  本文已影响0人  荒漠现甘泉

SDWebImageManager

SDWebImageManager是一个管理图片缓存和下载逻辑的一个管理类,将SDImageCacheSDWebImageDownloader结合起来处理图片的缓存和下载逻辑。

我们先来看下类的定义SDWebImageManager.h文件,代码如下:

@interface SDWebImageManager : NSObject

@property (weak, nonatomic, nullable) id <SDWebImageManagerDelegate> delegate;

@property (strong, nonatomic, readonly, nullable) SDImageCache *imageCache;
@property (strong, nonatomic, readonly, nullable) SDWebImageDownloader *imageDownloader;
// 返回cacheKey
@property (nonatomic, copy, nullable) SDWebImageCacheKeyFilterBlock cacheKeyFilter;

/**
 * 
   缓存序列化程序是一个块,用于将解码后的图像、源下载的数据转换为用于存储到磁盘缓存的实际数据。如果返回nil,则表示要从图像实例生成数据,请参见“SDImageCache”。
 */
// cacheData缓存数据序列化处理
@property (nonatomic, copy, nullable) SDWebImageCacheSerializerBlock cacheSerializer;

/**
 * Returns global SDWebImageManager instance.
 *
 * @return SDWebImageManager shared instance
 */
+ (nonnull instancetype)sharedManager;

/**
 * Allows to specify instance of cache and image downloader used with image manager.
   自定义cache和downloader
 * @return new instance of `SDWebImageManager` with specified cache and downloader.
 */
- (nonnull instancetype)initWithCache:(nonnull SDImageCache *)cache downloader:(nonnull SDWebImageDownloader *)downloader NS_DESIGNATED_INITIALIZER;

/**
 加载图片

 @param url 图片链接
 @param options SDWebImageOptions图片加载选项
 @param progressBlock 图片下载进度回调
 @param completedBlock 图片下载完成回调
 @return 具体加载图片的操作 SDWebImageOperation
 */
- (nullable id <SDWebImageOperation>)loadImageWithURL:(nullable NSURL *)url
                                              options:(SDWebImageOptions)options
                                             progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock
                                            completed:(nullable SDInternalCompletionBlock)completedBlock;

/**
 * Saves image to cache for given URL
 * 根据url缓存图片
 * @param image The image to cache 要缓存的图片
 * @param url   The URL to the image 图片链接
 *
 */
- (void)saveImageToCache:(nullable UIImage *)image forURL:(nullable NSURL *)url;

/**
 * Cancel all current operations
   取消所有正在下载的操作
 */
- (void)cancelAll;

/**
 * Check one or more operations running
   确定是否有图片正在下载
 */
- (BOOL)isRunning;

/**
 *  Async check if image has already been cached
    异步检查图片是否已经被缓存
 *
 *  @param url              image url 图片链接
 *  @param completionBlock  the block to be executed when the check is finished
 *                          检查完成回调
 *  @note the completion block is always executed on the main queue
 */
- (void)cachedImageExistsForURL:(nullable NSURL *)url
                     completion:(nullable SDWebImageCheckCacheCompletionBlock)completionBlock;

/**
 *  Async check if image has already been cached on disk only
    异步检查图片是否仅缓存在磁盘里
 *
 *  @param url              image url 图片链接
 *  @param completionBlock  the block to be executed when the check is finished
 *                          检查完成回调
 *  @note the completion block is always executed on the main queue
 */
- (void)diskImageExistsForURL:(nullable NSURL *)url
                   completion:(nullable SDWebImageCheckCacheCompletionBlock)completionBlock;


/**
 *Return the cache key for a given URL
  根据url查询缓存的key
 */
- (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url;

@end

从上面图片类的定义中可以看出SDWebImageManager是一个单例类,同时也支持自定义SDImageCacheSDWebImageDownloader。如下:

/**
 * Returns global SDWebImageManager instance.
 *
 * @return SDWebImageManager shared instance
 */
+ (nonnull instancetype)sharedManager;

/**
 * Allows to specify instance of cache and image downloader used with image manager.
   自定义cache和downloader
 * @return new instance of `SDWebImageManager` with specified cache and downloader.
 */
- (nonnull instancetype)initWithCache:(nonnull SDImageCache *)cache downloader:(nonnull SDWebImageDownloader *)downloader NS_DESIGNATED_INITIALIZER;

同时也支持实现SDWebImageManagerDelegate的代理,支持一些自定义的设置,是否支持从网络下载图片、自定义失败url以及自定义图片转换的规则,代码如下:

@property (weak, nonatomic, nullable) id <SDWebImageManagerDelegate> delegate;

@protocol SDWebImageManagerDelegate <NSObject>

@optional

/**
 判定某一个图片在缓存中没找到时,是否从网络下载

 @param imageManager imageManager
 @param imageURL 图片链接
 @return 是否从网络下载,默认为Yes
 */
- (BOOL)imageManager:(nonnull SDWebImageManager *)imageManager shouldDownloadImageForURL:(nullable NSURL *)imageURL;

/**
 * Controls the complicated logic to mark as failed URLs when download error occur.
   控制在发生下载错误时标记为失败URL的复杂逻辑。
 * If the delegate implement this method, we will not use the built-in way to mark URL as failed based on error code;
   如果委托实现了这个方法,我们将不会使用内置的方法根据错误代码将URL标记为失败;
 @param imageManager The current `SDWebImageManager`
 @param imageURL The url of the image
 @param error The download error for the url
 @return Whether to block this url or not. Return YES to mark this URL as failed.
 */
- (BOOL)imageManager:(nonnull SDWebImageManager *)imageManager shouldBlockFailedURL:(nonnull NSURL *)imageURL withError:(nonnull NSError *)error;

/**
 * Allows to transform the image immediately after it has been downloaded and just before to cache it on disk and memory.
   在下载后,图片缓存到磁盘和内存之前转换图片
 * NOTE: This method is called from a global queue in order to not to block the main thread.
   为了不阻塞主线程,这个方法是在全局队列中调用的
 *
 * @param imageManager The current `SDWebImageManager`
 * @param image        The image to transform 要转换的图片
 * @param imageURL     The url of the image to transform
 *
 * @return The transformed image object. 转换好的图片
 */
- (nullable UIImage *)imageManager:(nonnull SDWebImageManager *)imageManager transformDownloadedImage:(nullable UIImage *)image withURL:(nullable NSURL *)imageURL;

@end

同时也支持,自定义cacheKey缓存key的生成规则以及自定义cacheData的序列化处理.代码如下

// 返回cacheKey
@property (nonatomic, copy, nullable) SDWebImageCacheKeyFilterBlock cacheKeyFilter;

/**
 * 
   缓存序列化程序是一个块,用于将解码后的图像、源下载的数据转换为用于存储到磁盘缓存的实际数据。如果返回nil,则表示要从图像实例生成数据,请参见“SDImageCache”。
 */
// cacheData缓存数据序列化处理
@property (nonatomic, copy, nullable) SDWebImageCacheSerializerBlock cacheSerializer;
上一篇下一篇

猜你喜欢

热点阅读