美文网首页iOS 开发iOSiOS源码解读
SDWebImage源码解析(二)

SDWebImage源码解析(二)

作者: 没什么zzz | 来源:发表于2015-10-09 19:08 被阅读681次

这篇文章会比较短,对上一篇没有陈述好的问题进行一些补充。

1.上一篇说到SDImageCache使用完整的URL来作为磁盘缓存的key。但是有时候为了访问控制的目的,URL的部分内容会是动态的,这样磁盘缓存就起不了作用。

对于这个问题,SDWebImageManager给出了一个解决办法(也就是说单独使用SDImageCache是没有的,需要自己修改源码):设置一个cacheKeyFilter,以NSURL作为输入,输出一个NSString作为缓存key。

下面是SDWebImage GitHub主页的示例代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url) {
        url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];
        return [url absoluteString];
    };

    // Your app init code...
    return YES;
}

2.今天去面试的时候被问到,关于cleanDiskWithCompletionBlock:中使用NSdirectoryEnumerator的性能问题。使用NSdirectoryEnumerator遍历所有的缓存文件到底会不会造成性能问题,需不需要改进。

经过查询stackoverflow,知道使用NSdirectoryEnumerator遍历所有的缓存文件,获取文件属性,如我们需要的文件大小信息,是不会有性能问题的。NSdirectoryEnumerator获取文件属性是通过查看文件的inode数据,并不需要想象中的fileopen和fileclose。

inode中所包含的、UNIX用户经常使用的一些重要信息:

  • inode编号
  • 用来识别文件类型,以及用语stat C函数的模式信息
  • 文件的链接树木
  • 属主的UID
  • 属主的组ID(GID)
  • 文件的大小
  • 文件所使用的磁盘块的实际数目
  • 最近一次修改的时间
  • 最近一次访问的时间
  • 最近一次更改的时间

3.关于为何不在SDWebImage直接使用NSCache,而需要自定义它的子类AutoPurgeCache。

说明这个问题之前,先看看我们使用NSCache的优点。

NSCache的优点:

  • 自动删减功能
  • 线程安全
  • 不会拷贝健

这就是为何我们选用类似于集合的NSCache,而不用NSDictionary自己实现缓存的考虑了。

但是,根据这个stackoverflow问题,NSCache在iOS7系统中不会响应内存告警,所以在SDWebImage中就子类化了NSCache,自己监听内存告警,并removeAllObjects.

相关文章

  • SDWebImage源码解析(三)

    在前面的SDWebImage源码解析(一)和SDWebImage源码解析(二)中,解析了开源异步图片下载库SDWe...

  • SDWebImage

    1.SDWebImage源码解析(1)——总体架构,Cache读取2.SDWebImage源码解析(2)——ima...

  • SDWebImage源码解析(二)

    1 概述 SDWebImage使用了很多工具类来对图片的处理。比如获取图片类型、图片放大缩小、GIF图片处理、图片...

  • SDWebImage源码解析(二)

    这篇文章会比较短,对上一篇没有陈述好的问题进行一些补充。 1.上一篇说到SDImageCache使用完整的URL来...

  • SDWebImage源码解析(二)

    在SDWebImage源码解析(一)中,我从宏观上介绍了SDWebImage项目,并详细介绍了UIImageVie...

  • SDWebImage源码解析(二)

    上一篇(http://www.jianshu.com/p/8da0a588d57c)接着呢,我们就看一下 SDW...

  • SDWebImage源码解析二

    SDWebImage 5.0以后,项目中的代码文件非常多,这边对文件进行了一下简单区分,代码结构如下。 主要分为一...

  • SDWebImage源码解析<二>

    前言 我们在第一篇文章《SDWebImage源码解析<一>》已经了解到SDWebImage是通过 SDWebIma...

  • IOS之SDWebImage(附Demo)

    目录 一、SDWebImage安装集成 二、SDWebImage原理说明 三、SDWebImage源码实现步骤 四...

  • SDWebImage源码解析

    SDWebImage是一个开源的第三方库,支持从远程服务器下载并缓存图片的功能。它具有以下功能: 提供UIImag...

网友评论

本文标题:SDWebImage源码解析(二)

本文链接:https://www.haomeiwen.com/subject/quvncttx.html