zoukankan      html  css  js  c++  java
  • 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方法

     

     

     

     

     

      

     

  • 相关阅读:
    mysql多表关系
    mysql支持的数据类型
    数据库基本操作
    线程基础
    生产者和消费者模型
    并发编程一
    元类
    linux 关机/重启命令
    linux前后台任务切换
    centos7最小化安装后,yum安装pstree及mlocate
  • 原文地址:https://www.cnblogs.com/jiefangzhe/p/13092328.html
Copyright © 2011-2022 走看看