Kingfisher

ima1.kf.setImage(with: url)

为了兼容macOS, IOS

通过协议定义了kf,实际上就是本身

KingfisherOptionsInfo

可以配置一些设置

eg:只从内存中取,内存中没有就直接下载

eg:直接下载最新的

1内存中,2磁盘中,下载最新的缓存到内存和磁盘

存在磁盘中的是image转成的data

在内存中存的的是NSCache

1.NSCache类结合了各种自动删除策略,以确保不会占用过多的系统内存

如果其它应用需要内存时,系统自动执行这些策略

当调用这些策略时,会从缓存中删除一些对象,以最大限度减少内存的占用。

2.NSCache是线程安全的,我们可以在不同的线程中添加、删除和查询缓存中的对象,而不需要锁定缓存区域。

不像NSMutableDictionary对象,一个缓存对象不会拷贝key对象。

NSCache [key:value(StorageObject对象里边有属性key,属性value)]

怎么就存在内存里了

通过一个单利对象存储,单利中有属性memoryStorage,里边有个NSCache

KingfisherManager.shared

1.增加了一个清楚内存缓存的策略

通过一个定时器定期清除过期的缓存,默认为2分钟(可以设定)清理一次

删除缓存时间大于5分钟(可以设定)的对象,保证了一个对象在内存中存在时间是5到7分钟

2.默认的缓存对象最大个数是无限大

3.内存大小的celue

// Bitmap memory cost with bytes. 计算每个图片的大小B

var cost: Int {

let pixel = Int(size.width * size.height * scale * scale)

guard let cgImage = cgImage else {

return pixel * 4

}

return pixel * cgImage.bitsPerPixel / 8

}

最大占用内存数totalCostLimit 是 物理内存的1/4

let totalMemory = ProcessInfo.processInfo.physicalMemory

let costLimit = totalMemory / 4

二 disk磁盘中缓存策略

每次进入后台时,和将要推出应用时  清理7天(可以设置)之前的缓存,如果缓存大于设定值的最大值则删除最早缓存的data

磁盘中存取的是data

有关其中的缓存的key    是url  如果url中不包含具体图片的名称,但后台更改图片但是url地址不变时不会加载中新图片

在cell中的label设置为自适应,设置好约束,tableView代理方法中不要给cell高度,cell的高度会根据label文字的高度确定

Kingfisher的更多相关文章

  1. 使用 Kingfisher 处理网络图片的读取与缓存

    Kingfisher 是一个读取网络图片和处理本地缓存的开源库,由 onevcat 开发.提到图片缓存库,那么熟悉 Objective-C 开发的同学,可能会想起 SDWebImage. 没错,Kin ...

  2. 源码阅读-Kingfisher

    最后更新:2018-01-16 使用教程: 官方的链接 使用 Kingfisher 处理网络图片的读取与缓存 1. 开始使用 桥接 KingFisher, 利用 KingfisherCompatibl ...

  3. Swift高仿iOS网易云音乐Moya+RxSwift+Kingfisher+MVC+MVVM

    效果 列文章目录 因为目录比较多,每次更新这里比较麻烦,所以推荐点击到主页,然后查看iOS Swift云音乐专栏. 目简介 这是一个使用Swift(还有OC版本)语言,从0开发一个iOS平台,接近企业 ...

  4. extension Kingfisher where Base: Image:泛型类型的具体化与实例化

    具体化:针对特定的类型参量进行二次定义: 实例化:实例化:

  5. Swift 必备开发库 (高级篇) (转)

    1.CryptoSwift swift加密库, 支持md5,sha1,sha224,sha256... github地址: https://github.com/krzyzanowskim/Crypt ...

  6. 玩转Podfile

    前言 经常使用CocoaPods来管理iOS项目中的第三方库,但是我们要使用CocoaPods来管理第三方库,前提是要写好Podfile文件,通过这个文件来配置第三方库与项目之间的依赖.版本等信息. ...

  7. 微信Swift完整项目应用源码

    TSWeChat 中文说明 A WeChat alternative, written in Swift. 运行环境 Cocoapods 0.39.0 + iOS 8.0+ / Mac OS X 10 ...

  8. ios项目里扒出来的json文件

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...

  9. 【夯实PHP基础】PHP标准库 SPL

    PHP SPL笔记 这几天,我在学习PHP语言中的SPL. 这个东西应该属于PHP中的高级内容,看上去很复杂,但是非常有用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 由于这是供 ...

随机推荐

  1. 手撕 JVM 垃圾收集日志

    下图是本篇的写作大纲,将从以下四个方面介绍怎么样处理 JVM 日志. 有准备才能不慌 想要分析日志,首先你得有日志呀,对不对.凡是未雨绸蒙总是没错的.所谓有日志的意思,你要把 JVM 参数配置好,日志 ...

  2. Coderfocers-616c

    You are given a rectangular field of n × m cells. Each cell is either empty or impassable (contains ...

  3. [Java并发] AQS抽象队列同步器源码解析--锁获取过程

    要深入了解java并发知识,AbstractQueuedSynchronizer(AQS)是必须要拿出来深入学习的,AQS可以说是贯穿了整个JUC并发包,例如ReentrantLock,CountDo ...

  4. git 多仓库源 配置

    在后台配好ssh公匙后 在C:\Users\Administrator\.ssh 下修改config文件  就叫config不带后缀 若没有则新建 配置SSH 密匙 # 配置github.com Ho ...

  5. USB视频采集系统 视频测试软件将正式发布(方便调试测试各自摄像头,RAW,RGB,YUV)

    先上图,看看这个软件,学习fpga将近一年,了解视频图像开发方向也半年有余,不断学习不断总结,开发软件工具是为了更方便的学习新通信 主要相关知识: FPGA+SDRAM+VGA(双端口fifo技术) ...

  6. js如何判断一个对象是数组(函数)

    js如何判断一个对象是数组(函数) 1.typeof操作符  示例: // 数值 typeof 37 === 'number'; // 字符串 typeof '' === 'string'; // 布 ...

  7. NTFS在openwrt下的挂载问题

    在openwrt上市可以挂载ntfs分区的,但是如果原来如果搞过win,或者异常关机,那么会遇到以下的错误: root@Openwrt:/etc/config# mount -t ntfs -o rw ...

  8. Maven pom.xml 全配置(一)常用配置

    Maven pom.xml 全配置(一)常用配置 这里贴出一个Maven中出现频率较高的配置参数注释,方便理解项目中Maven的配置具体的作用.如果在此博文中没有找到你想看到的参数,可以移步Maven ...

  9. IJKPlayerView设置Header播放视频的方法

    播放b站视频连接的实测图 https://github.com/Rukey7/IjkPlayerView 使用库的连接 在用这个库播放b站视频连接的时候总是播放不了 检查了一下是因为b站视频连接需要验 ...

  10. CSS flex 布局快速入门

    以前已经学过flex了,一直没做笔记,现在做下笔记再回忆下. 首先,flex布局的迷之属性们,如果一知半解,机械记忆的话,那不到半个月基本忘光光.先感受一下这12个flex布局属性,是不是很“迷”人. ...