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. 设计模式GOF23(结构型模式:代理模式,适配模式,桥接模式,组合模式,装饰模式,外观模式,享元模式)

    结构型模式: – 分类: • 适配器模式.代理模式.桥接模式.装饰模式.组合模式.外观模式.享元模式 – 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题.   结构 ...

  2. nbuoj 2080 洛谷p1025 数的划分

    链接:http://www.nbuoj.com/v8.83/Problems/Problem.php?pid=2820 链接:https://www.luogu.org/problem/P1025 题 ...

  3. 350. 两个数组的交集 II

    给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5 ...

  4. 常见的RuntimeException报错原因

    对于RuntimeException 做java开发的朋友想必不会陌生,可以用于事物的回滚操作.异常类型也有很多种,写这篇文章主要是为了总结自己开发中遇到的一些异常类型 以便帮助大家遇到相应的报错找不 ...

  5. CSS-sprite(雪碧图、精灵图)

    Css Sprite(优点) 减少图片的字节. 减少网页的http请求,从而大大的提高页面的性能. 解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命名就可以了,不需要对每一个小元素进行命名 ...

  6. 进程-(process)、线程-(Thread)

    进程和线程之间的区别: 内存之间的区别: 进程之间不可以共享内存空间,每个进程都有各自独立的内存空间: 线程之间则是可以共享一个进程里的内存空间: 通信机制方面的区别 默认情况下,进程之间很难互通的, ...

  7. Dapr 运用之集成 Asp.Net Core Grpc 调用篇

    前置条件: <Dapr 运用> 改造 ProductService 以提供 gRPC 服务 从 NuGet 或程序包管理控制台安装 gRPC 服务必须的包 Grpc.AspNetCore ...

  8. spring data jpa 操作pipelinedb 的continuous view 与stream

    一. 由于pipelinedb是postgreSQL的扩展,因此相关依赖于配置都合集成postgreSQL是一样的. springboot + spring data jpa + postgreSQL ...

  9. 关于toString的自动调用

    class a{ } class b extends a{ String rr = "zzz"; public String toString(){ return "aa ...

  10. c#截取后台窗口的图片

    c#截取后台窗口的图片,自测可用,据说性能很一般,用用吧 struct RECT { public int Left; // x position of upper-left corner publi ...