异常现场
原YYCache封装项目中本地缓存原主要使用的事NSUserDefault, 后在工程中发现有YYCache的存在,于是,主要存储变成UserDefault与YYCache争霸战场。
困难,在引用YYCache后,慢慢发生了。项目上线后,渐渐的部门老大兼产品经理说App一些引导页总是在操作后,过一阵子又弹窗需要再次操作(正常操作一次后,不卸载不再主动弹框, 为何强调产品经理,某些需求不合理后,怪技术、怪测试)。
异常只出现在部门老大身上,天天来问这个怎么处理(手上已经有3个项目堆积在一起了,还来找麻烦)。于是在代码中增加了相关测试日志,跟踪下用户操作结果。
根据日志结果分析,App在业务上确实异常执行弹框操作,单在代码逻辑上却是正常的,重新操作后,本地存储标志也正常写入。
可以肯定,代码中未主动调用YYCache的所有缓存清理操作,YYCache本身也不会主动去清理缓存。
就这样、又过去了几天。。。
下班后,再次被老大拿去分析为何会这样,纠着代码去指挥一通,意思无非就是,以前没有这个问题,你重新封装了YYCache后就出现了这个问题。
对比以前使用的YYCache封装,跟新封装没有本质区别(为何重新封装,不在这次讨论范围)。仔细排查后,发现使用UserDefault不会出现这个问题。所有的删除的元凶慢慢指向了系统
Cache NSUserDefaults
通过文档说明,苹果设备在内存过低时,会主动清理Cache路径下所有缓存。
询问后,他的设备也确实没多少内存,满足被清理条件。当通过UserDefault方式存储时,不会因为内存过低而主动去删除本地缓存。
YYCache内部默认存储路径
默认存储路径正好位于Cache路径下,在手机内存过低后,被系统主动清理
修改后
网友评论