我们应用里都包含大量数据,使用缓存可以让应用程序快速响应数据展示、用户输入,使程序高效运行;
MFSCache是一套简单高效的缓存数据机制,使用方式、性能效率都非常好,增加缓存生命周期、缓存空间、支持更多数据类型、数据加密、全局对象(伪单例)、快速缓存、分级、移除缓存;
setObject:forKey:和objectForKey:,KEY值各模块自己定义,推荐使用前缀,例:@”module.home.page”
公共部分的KEY可以统一定义,如用户定位的城市、用户需要存储的信息;
通过-setObject:forKey:duration:保存的对象具有时效性,超过duration秒数的对象无法获取到,返回nil;
提示:过期的对象会异步从磁盘中删除;
通过+defaultManager获取的cacheManager实例对应一块共用空间,如果需要使用不同的空间,使用-initWithSuiteName:创建不同的cacheManager实例;
例如:不同的用户订单数据不同,使用-initWithSuiteName:初始化的cacheManager对象使用memberId作为suiteName,为用户生成不同的空间,相同的KEY可以存储数据在不同的空间,空间之间的数据无法互通
存储对象支持NSString, NSURL, NSData, NSNumber, NSDictionary, NSArray, NSNull, 自定义实体类(NSObject),如有无法满足的新类型在issues中提出或自定义添加;
与NSUserDefault的存储方式不同,MFSCacheManager存储磁盘的所有数据都是AES加密,使用MFS的默认密钥,仅凭借缓存文件无法查看,保证安全性;
新增-setTempObject:forKey:,用于保存App生命周期内需要全局使用的对象,临时对象存储在内存中,不序列化,不占用硬盘空间;
提示:相同的空间,使用相同的KEY获取对象,会优先获取全局临时对象,然后获取缓存对象;
缓存过一次的对象会自动加载到内存中,再次读取会直接从内存获取对象,减少文件消耗;内存过多会自动释放这部分内存,再次获取再执行相同的步骤;
MFSCacheManager管理的缓存分为3级,永久、默认、定时,在缓存使用-setObject:forKey:保存的对象里,会调用-setObject:forKey:duration:方法,duration默认为0,生成默认缓存,使用自定义的存储-setObject:forKey:duration:,duration小于0(负数)表示存储了一个永久对象,duration大于0表示存储了一个定时对象;
实例方法-removeObjectsWithCompletionBlock:会移除对应空间的默认级别的缓存,block回调删除的文件大小,永久级别的缓存不可被-removeObjectsWithCompletionBlock:移除,只能在自己的cacheManager实例中,使用-removeObjectForKey来移除;
-removeExpireObjects表示异步检查缓存的生命周期,删除过期的定时缓存,建议App启动调用;
+removeObjectsWithCompletionBlock:和+ (void)removeExpireObjects表示不区分空间,全部删除默认级别和过期的定时缓存(永久缓存无法被删除);
以5个属性的对象为例,在数组中添加10W次,经过模拟器测试,存储耗时:1.5s,读取耗时:2.8s;
提示:已经过尾递归和JSON对象化对比,优化了70%耗损,现在耗时最优;
通过-objectForKey:获取的对象修改值不会影响原有的缓存对象,不执行-setObject:forKey:前,每次得到的对象都是重新生成的,值一样,指针地址不一样;
默认同步执行,线程安全,可放心使用;
如果您发现任何问题或有建议,请提交issues,谢谢;
MFSCache在MIT许可协议下可用。查看LICENSE文件获取更多信息。