Kingfisher
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的更多相关文章
- 使用 Kingfisher 处理网络图片的读取与缓存
Kingfisher 是一个读取网络图片和处理本地缓存的开源库,由 onevcat 开发.提到图片缓存库,那么熟悉 Objective-C 开发的同学,可能会想起 SDWebImage. 没错,Kin ...
- 源码阅读-Kingfisher
最后更新:2018-01-16 使用教程: 官方的链接 使用 Kingfisher 处理网络图片的读取与缓存 1. 开始使用 桥接 KingFisher, 利用 KingfisherCompatibl ...
- Swift高仿iOS网易云音乐Moya+RxSwift+Kingfisher+MVC+MVVM
效果 列文章目录 因为目录比较多,每次更新这里比较麻烦,所以推荐点击到主页,然后查看iOS Swift云音乐专栏. 目简介 这是一个使用Swift(还有OC版本)语言,从0开发一个iOS平台,接近企业 ...
- extension Kingfisher where Base: Image:泛型类型的具体化与实例化
具体化:针对特定的类型参量进行二次定义: 实例化:实例化:
- Swift 必备开发库 (高级篇) (转)
1.CryptoSwift swift加密库, 支持md5,sha1,sha224,sha256... github地址: https://github.com/krzyzanowskim/Crypt ...
- 玩转Podfile
前言 经常使用CocoaPods来管理iOS项目中的第三方库,但是我们要使用CocoaPods来管理第三方库,前提是要写好Podfile文件,通过这个文件来配置第三方库与项目之间的依赖.版本等信息. ...
- 微信Swift完整项目应用源码
TSWeChat 中文说明 A WeChat alternative, written in Swift. 运行环境 Cocoapods 0.39.0 + iOS 8.0+ / Mac OS X 10 ...
- 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. ...
- 【夯实PHP基础】PHP标准库 SPL
PHP SPL笔记 这几天,我在学习PHP语言中的SPL. 这个东西应该属于PHP中的高级内容,看上去很复杂,但是非常有用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 由于这是供 ...
随机推荐
- 手撕 JVM 垃圾收集日志
下图是本篇的写作大纲,将从以下四个方面介绍怎么样处理 JVM 日志. 有准备才能不慌 想要分析日志,首先你得有日志呀,对不对.凡是未雨绸蒙总是没错的.所谓有日志的意思,你要把 JVM 参数配置好,日志 ...
- Coderfocers-616c
You are given a rectangular field of n × m cells. Each cell is either empty or impassable (contains ...
- [Java并发] AQS抽象队列同步器源码解析--锁获取过程
要深入了解java并发知识,AbstractQueuedSynchronizer(AQS)是必须要拿出来深入学习的,AQS可以说是贯穿了整个JUC并发包,例如ReentrantLock,CountDo ...
- git 多仓库源 配置
在后台配好ssh公匙后 在C:\Users\Administrator\.ssh 下修改config文件 就叫config不带后缀 若没有则新建 配置SSH 密匙 # 配置github.com Ho ...
- USB视频采集系统 视频测试软件将正式发布(方便调试测试各自摄像头,RAW,RGB,YUV)
先上图,看看这个软件,学习fpga将近一年,了解视频图像开发方向也半年有余,不断学习不断总结,开发软件工具是为了更方便的学习新通信 主要相关知识: FPGA+SDRAM+VGA(双端口fifo技术) ...
- js如何判断一个对象是数组(函数)
js如何判断一个对象是数组(函数) 1.typeof操作符 示例: // 数值 typeof 37 === 'number'; // 字符串 typeof '' === 'string'; // 布 ...
- NTFS在openwrt下的挂载问题
在openwrt上市可以挂载ntfs分区的,但是如果原来如果搞过win,或者异常关机,那么会遇到以下的错误: root@Openwrt:/etc/config# mount -t ntfs -o rw ...
- Maven pom.xml 全配置(一)常用配置
Maven pom.xml 全配置(一)常用配置 这里贴出一个Maven中出现频率较高的配置参数注释,方便理解项目中Maven的配置具体的作用.如果在此博文中没有找到你想看到的参数,可以移步Maven ...
- IJKPlayerView设置Header播放视频的方法
播放b站视频连接的实测图 https://github.com/Rukey7/IjkPlayerView 使用库的连接 在用这个库播放b站视频连接的时候总是播放不了 检查了一下是因为b站视频连接需要验 ...
- CSS flex 布局快速入门
以前已经学过flex了,一直没做笔记,现在做下笔记再回忆下. 首先,flex布局的迷之属性们,如果一知半解,机械记忆的话,那不到半个月基本忘光光.先感受一下这12个flex布局属性,是不是很“迷”人. ...