SDWebImage源码分析(二)
2021-02-07 12:15
标签:webim ring 方法 unicode erb manage round error out //开始请求 - (void)start; //取消请求 - (void)cancel; 1: 下载器->SDWebImageDownloaderDelegate 新增了didFailWithError方法重载 2: 管理器->SDWebImageManager->downloadWithURL方法 3: 管理器->SDWebImageManager->cancelForDelegate 4: 管理器->SDWebImageManager->didFinishWithImage->下载成功回调 管理器实现了SDWebImageDownloaderDelegate协议 5: 下载器->SDWebImageDownloader->请求回调 增加didReceiveData、connectionDidFinishLoading、didFailWithError 6: 缓存器->SDImageCache, 新增后台通知 UIApplicationDidEnterBackgroundNotification 当我们按下返回键(后台模式->清空内存缓存) (因为手机内存比较小, 如果不及时释放内存, 容易导致卡死) 如果图片格式是PNG或GIF,当存储到磁盘进行缓存时候,不要将图像转换为JPEG,因为他能够节省CPU和内存以及alpha通道/图像的清晰度。 @property (nonatomic, retain) NSMutableData *imageData;//图片数据 将下载到的图片data拼接到imageData中,然后在代理回调中传递 新增了方法重载 - (void)storeImage:(UIImage *)image imageData:(NSData *)data forKey:(NSString *)key toDisk:(BOOL)toDisk; 新增了属性, NSMutableDictionary *storeDataQueue; 增加了二进制NSData数据存储->磁盘 新增了回调imageDownloaderDidFinish 1、异步检查磁盘上的缓存,这样我们就不会阻塞主线程 2、缓存代理回调实现 方法一: - (void)imageCache:(SDImageCache *)imageCache didFindImage:(UIImage *)image forKey:(NSString *)key userInfo:(NSDictionary *)info; 方法二: - (void)imageCache:(SDImageCache *)imageCache didNotFindImageForKey:(NSString *)key userInfo:(NSDictionary *)info; 从回调缓存代理->回调管理器代理->通知客户端结果 1、新增了属性(读写都不能够影响主线程->阻塞) NSOperationQueue *cacheOutQueue; 目的:避免阻塞主线程 2、新增异步读取缓存方法 queryDiskCacheForKey 两个缓存:内存缓存、磁盘缓存 读取是耗时操作 3、新增了notifyDelegate方法 目的:通知所有的缓存代理 4、新增了queryDiskCacheOperation方法 SDWebImage源码分析(二) 标签:webim ring 方法 unicode erb manage round error out 原文地址:https://www.cnblogs.com/jiefangzhe/p/13092328.html一: 2.0版本增加网络请求:
二: 增加网络请求后, 整体功能进行了优化
更新说明:
更新一:下载器->SDWebImageDownloader
更新二:缓存器->SDImageCache
更新三:代理->SDWebImageDownloaderDelegate
缓存代理
更新四:缓存器->SDImageCache