YYDiskCache缓存是通过file文件,splits进行数据存储与读取操作,直接放代码

初始化方法:

- (nullable instancetype)initWithPath:(NSString *)path;

- (nullable instancetype)initWithPath:(NSString *)path

inlineThreshold:(NSUInteger)threshold

我们看两个方法的实现:

- (instancetype)initWithPath:(NSString *)path {

return [self initWithPath:path inlineThreshold:1024 * 20]; // 20KB

}

- (instancetype)initWithPath:(NSString *)path

inlineThreshold:(NSUInteger)threshold {

self = [super init];

if (!self) return nil;

YYDiskCache *globalCache = _YYDiskCacheGetGlobal(path);

if (globalCache) return globalCache;

YYKVStorageType type;

if (threshold == 0) {

type = YYKVStorageTypeFile;

} else if (threshold == NSUIntegerMax) {

type = YYKVStorageTypeSQLite;

} else {

type = YYKVStorageTypeMixed;

}

YYKVStorage *kv = [[YYKVStorage alloc] initWithPath:path type:type];

if (!kv) return nil;

_kv = kv;

_path = path;

_lock = dispatch_semaphore_create(1);

_queue = dispatch_queue_create("com.ibireme.cache.disk", DISPATCH_QUEUE_CONCURRENT);

_inlineThreshold = threshold;

_countLimit = NSUIntegerMax;

_costLimit = NSUIntegerMax;

_ageLimit = DBL_MAX;

_freeDiskSpaceLimit = 0;

_autoTrimInterval = 60;

[self _trimRecursively];

_YYDiskCacheSetGlobal(self);

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_appWillBeTerminated) name:UIApplicationWillTerminateNotification object:nil];

return self;

}

由上可见 initWithPath:方法是调用initWithPath:inlineThreshold:方法创建的disk缓存,disk缓存存在三种缓存策略YYKVStorageTypeFile文件缓存、YYKVStorageTypeSQLite数据库缓存、YYKVStorageTypeMixed混合缓存

- (instancetype)initWithPath:(NSString *)path创建的是默认20KB的混合缓存策略。缓存策略下一个小节去讲述概括

常用的属性:

@property (nullable, copy) NSString *name; // 缓存的名字

@property (readonly) NSString *path;//缓存的位置

@property (readonly) NSUInteger inlineThreshold; //缓存的临界数值用于缓存类型

@property (nullable, copy) NSData *(^customArchiveBlock)(id object); // 块方法归档数据

@property (nullable, copy) id (^customUnarchiveBlock)(NSData *data);// 块方法解归档数据

@property (nullable, copy) NSString *(^customFileNameBlock)(NSString *key); // 自定义文件设置文件名

/*disk缓存操作方法*/

/*是否含有缓存*/

- (BOOL)containsObjectForKey:(NSString *)key;

- (void)containsObjectForKey:(NSString *)key withBlock:(void(^)(NSString *key, BOOL contains))block;

/*获取缓存*/

- (nullable id<NSCoding>)objectForKey:(NSString *)key;

- (void)objectForKey:(NSString *)key withBlock:(void(^)(NSString *key, id<NSCoding> _Nullable object))block;

/*设置缓存*/

- (void)setObject:(nullable id<NSCoding>)object forKey:(NSString *)key;

- (void)setObject:(nullable id<NSCoding>)object forKey:(NSString *)key withBlock:(void(^)(void))block;

/*移除缓存*/

- (void)removeObjectForKey:(NSString *)key;

- (void)removeObjectForKey:(NSString *)key withBlock:(void(^)(NSString *key))block;

- (void)removeAllObjectsWithBlock:(void(^)(void))block;

- (void)removeAllObjectsWithProgressBlock:(nullable void(^)(int removedCount, int totalCount))progress

endBlock:(nullable void(^)(BOOL error))end;

- (void)removeAllObjects;

/*缓存数量*/

- (NSInteger)totalCount;

- (void)totalCountWithBlock:(void(^)(NSInteger totalCount))block;

/*缓存大小*/

- (NSInteger)totalCost;

- (void)totalCostWithBlock:(void(^)(NSInteger totalCost))block;

/*LRU缓存清除*/后期介绍

- (void)trimToCount:(NSUInteger)count;

- (void)trimToCount:(NSUInteger)count withBlock:(void(^)(void))block;

- (void)trimToCost:(NSUInteger)cost;

- (void)trimToCost:(NSUInteger)cost withBlock:(void(^)(void))block;

- (void)trimToAge:(NSTimeInterval)age;

- (void)trimToAge:(NSTimeInterval)age withBlock:(void(^)(void))block;

/*存取对象的扩展数据*/

+ (nullable NSData *)getExtendedDataFromObject:(id)object;

+ (void)setExtendedData:(nullable NSData *)extendedData toObject:(id)object;

使用方法:

func userDiskCache() -> Void {

var diskPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!

diskPath += "/DiskCache"

// 创建默认为20KB的缓存,创建缓存的策略是file于SQlit混合使用

let diskCache:YYDiskCache = YYDiskCache.init(path: diskPath)!

diskCache.name = "DiskCacheName"

/*进行数据缓存*/

diskCache.setObject("你好" as NSCoding, forKey: "DiskCacheKey")

/*判断数据缓存*/

let isContent:Bool = diskCache.containsObject(forKey: "DiskCacheKey")

print("isContent:\(isContent)")

/*读取缓存数据*/

let data:String = diskCache.object(forKey: "DiskCacheKey") as! String

print("data:\(data)")

/*获取缓存的数量*/

let cacheCount:Int = diskCache.totalCount()

print("cacheCount:\(cacheCount)")

/*获取缓存的大小*/

let cacheSize:Int = diskCache.totalCost()

print("缓存的总体成本cacheSize:\(cacheSize)B")

}

swift - YYCache 之 YYDiskCache相关推荐

  1. iOS—缓存YYCache框架

    下载地址 :点击打开链接 一.简介: 计算上的的cache 就是高速缓存,计算机组成课程里的定义是,存在于主存和cpu之间,主要用于解决CPU处理数据的速度远远大于读取主存数据的速度. 手机上也有ca ...

  2. YYKIT系列之 —— YYCache

    YYCache是一个优秀的缓存框架,其文件结构如下: YYCache的文件结构分为四个,YYCAche.YYDiskCache.YYKVStorage.YYMemoryCache YYCAche使用以 ...

  3. 深入理解YYCache缓存策略

    文章目录 前言 几个主要成员类 1 YYCache 2 YYMemoryCache 3 YYDiskCache 实例化 1 实例方法 2 构造器方法 查 1 检查是否有缓存 2 读缓存 增 1 写内存 ...

  4. YYCache 源码解析

    YYCache 源码解析 YYCache是国内开发者ibireme开源的一个线程安全的高性能缓存组件,代码风格简洁清晰,在GitHub上已经有了1600+颗星. 阅读它的源码有助于建立比较完整的缓存设 ...

  5. 如何使用YYCache存储自定义对象

    YYCache是一个缓存框架,由YYCache.YYDiskCache.YYMemoryCache和YYKVStorage组成.在项目开发过程中,想通过YYCache存储一个自定义对象,这个对象包括文 ...

  6. iOS开发 数据存储之YYCache

    一.关于YYCache YYCache由YYCache.YYDiskCache.YYMemoryCache和YYKVStorage组成,其中YYKVStorage可直接对sqlite和文件系统进行读写 ...

  7. YYCache源码解读 (一)

    YYCache   YYCache是 ibireme 大神在2015年设计的一个IOS缓存工具.   通常来讲,一个缓存包括内存缓存和磁盘缓存.YYCache在磁盘缓存的设计上使用数据库sqlite映 ...

  8. YYCache 源码学习(二):YYDiskCache

    整体思路 从作者的<YYCache 设计思路>一文中可以看出,作者在设计YYDiskCache之前做了充分的测试:iPhone 6 64G 下,SQLite 写入性能比直接写文件要高,但读 ...

  9. YYCache 源码学习(一):YYMemoryCache

    其实最近是在重新熟练Swift的使用,我想出了一个比较实用的方法,那就是一边看OC的项目,看懂之后用Swift实现一遍.这样既学习了优秀的源码又练习了Swift,一举两得. 之前看过几篇文章是剖析YY ...

最新文章

  1. 京东商城背后的AI技术能力揭秘 - 基于关键词自动生成摘要
  2. IBM Rational DOORS通过DXL进行二次开发初试(2)
  3. WinForm界面设计优化过程
  4. c++中std::set自定义去重和排序函数
  5. Leetcode 950. Reveal Cards In Increasing Order
  6. hive实现根据用户分组,按用户记录求上下两条记录的时间差
  7. 使用Aop管理所有Valid结构bindingResult
  8. 我的高拍仪自动阅卷系统
  9. 张鑫旭的《CSS世界》读后笔记
  10. android dagger2 讲解,用Dagger2在Android中实现依赖注入
  11. Spark/Flink/CarbonData技术实践最佳案例解析
  12. 几何均数怎样用计算机算,算术均数与几何均数的意义及计算方法
  13. java实现猜你喜欢_猜你喜欢实现原理:电商“猜你喜欢“是怎么实现的?
  14. 1. Boost.Asio入门
  15. 【Hive】Hive锁机制分析及任务问题处理
  16. 读书笔记-指数基金投资指南
  17. mac os 触摸屏_为什么没有出现触摸屏Mac
  18. 操作系统对计算机组件的抽象概念表示
  19. 什么品牌的蓝牙耳机音质好?四款高音质蓝牙耳机推荐
  20. 新版标准日本语中级_第十一课

热门文章

  1. 网页中插入视频播放,音频播放,自动验证输入框格式
  2. 科大讯飞发布四川话语音识别技术,号称识别准确率超过85%
  3. 让你的网站打开的更快
  4. 如何在群晖NAS中使用frp进行内网穿透
  5. 堡垒机jumperserver搭建以及监控资源使用
  6. C/C++:sizeof数组与指针
  7. python123自定义幂函数_《python语言程序设计》_第三章(数字函数、字符串和对象)...
  8. node.js爬虫之下载图片,批量下载图片,控制下载图片并行上限
  9. 刀塔传奇-王信文 分享总结
  10. freemarker 应用模板导出Execle(解决生成弹出版本不适合)