SDWebImage源码分析(二)

一: 2.0版本增加网络请求:

  //开始请求

  - (void)start;

  //取消请求

  - (void)cancel;

二: 增加网络请求后, 整体功能进行了优化

  1:  下载器->SDWebImageDownloaderDelegate

      新增了didFailWithError方法重载

  2: 管理器->SDWebImageManager->downloadWithURL方法

  3: 管理器->SDWebImageManager->cancelForDelegate

  4: 管理器->SDWebImageManager->didFinishWithImage->下载成功回调

      管理器实现了SDWebImageDownloaderDelegate协议

  5: 下载器->SDWebImageDownloader->请求回调

      增加didReceiveDataconnectionDidFinishLoadingdidFailWithError

  6: 缓存器->SDImageCache, 

      新增后台通知 

       UIApplicationDidEnterBackgroundNotification

      当我们按下返回键(后台模式->清空内存缓存) (因为手机内存比较小, 如果不及时释放内存, 容易导致卡死)

 

  更新说明:

    如果图片格式是PNGGIF,当存储到磁盘进行缓存时候,不要将图像转换为JPEG,因为他能够节省CPU和内存以及alpha通道/图像的清晰度。

 

  

  更新一:下载器->SDWebImageDownloader

 

      @property (nonatomic, retain) NSMutableData *imageData;//图片数据

      将下载到的图片data拼接到imageData中,然后在代理回调中传递

 

  更新二:缓存器->SDImageCache

       新增了方法重载

        - (void)storeImage:(UIImage *)image imageData:(NSData *)data forKey:(NSString *)key toDisk:(BOOL)toDisk;

       新增了属性, NSMutableDictionary *storeDataQueue;

       增加了二进制NSData数据存储->磁盘

  更新三:代理->SDWebImageDownloaderDelegate

        新增了回调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;

      从回调缓存代理->回调管理器代理->通知客户端结果

 

  更新四:缓存器->SDImageCache

      1、新增了属性(读写都不能够影响主线程->阻塞)

        NSOperationQueue *cacheOutQueue;

        目的:避免阻塞主线程

      2、新增异步读取缓存方法

        queryDiskCacheForKey

        两个缓存:内存缓存、磁盘缓存

        读取是耗时操作

       3、新增了notifyDelegate方法

        目的:通知所有的缓存代理

       4、新增了queryDiskCacheOperation方法

 

 

 

 

 

  

 

原文地址:https://www.cnblogs.com/jiefangzhe/p/13092328.html