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中的高级内容,看上去很复杂,但是非常有用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 由于这是供 ...
随机推荐
- 设计模式GOF23(结构型模式:代理模式,适配模式,桥接模式,组合模式,装饰模式,外观模式,享元模式)
结构型模式: – 分类: • 适配器模式.代理模式.桥接模式.装饰模式.组合模式.外观模式.享元模式 – 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题. 结构 ...
- nbuoj 2080 洛谷p1025 数的划分
链接:http://www.nbuoj.com/v8.83/Problems/Problem.php?pid=2820 链接:https://www.luogu.org/problem/P1025 题 ...
- 350. 两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5 ...
- 常见的RuntimeException报错原因
对于RuntimeException 做java开发的朋友想必不会陌生,可以用于事物的回滚操作.异常类型也有很多种,写这篇文章主要是为了总结自己开发中遇到的一些异常类型 以便帮助大家遇到相应的报错找不 ...
- CSS-sprite(雪碧图、精灵图)
Css Sprite(优点) 减少图片的字节. 减少网页的http请求,从而大大的提高页面的性能. 解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命名就可以了,不需要对每一个小元素进行命名 ...
- 进程-(process)、线程-(Thread)
进程和线程之间的区别: 内存之间的区别: 进程之间不可以共享内存空间,每个进程都有各自独立的内存空间: 线程之间则是可以共享一个进程里的内存空间: 通信机制方面的区别 默认情况下,进程之间很难互通的, ...
- Dapr 运用之集成 Asp.Net Core Grpc 调用篇
前置条件: <Dapr 运用> 改造 ProductService 以提供 gRPC 服务 从 NuGet 或程序包管理控制台安装 gRPC 服务必须的包 Grpc.AspNetCore ...
- spring data jpa 操作pipelinedb 的continuous view 与stream
一. 由于pipelinedb是postgreSQL的扩展,因此相关依赖于配置都合集成postgreSQL是一样的. springboot + spring data jpa + postgreSQL ...
- 关于toString的自动调用
class a{ } class b extends a{ String rr = "zzz"; public String toString(){ return "aa ...
- c#截取后台窗口的图片
c#截取后台窗口的图片,自测可用,据说性能很一般,用用吧 struct RECT { public int Left; // x position of upper-left corner publi ...