明明没有权限,iOS 里的应用是怎么清缓存的?

我不清楚金山电池医生是怎么做到的,也许他们用到了什么神奇的私有 API,如有高人知道,请不吝赐教。

但其实我不用任何公开或私有 API 也能做到这点。

因为 iOS 有这样一个功能:当系统剩余空间不足时,iOS 会自动把所有 App 的临时文件夹及缓存文件夹清空。

所以做一个清缓存的 App 很简单,就只要不停地往系统里写入垃圾数据,写到系统剩余空间不足时,系统自然就会把其他程序的缓存也清掉了。

清内存也可以用类似的原理,App 只需要不停地加大自己的内存占用,系统就会自动把其他程序的内存释放出来了(当然不能搞太猛,要处理好 Low Memory Warning ,不然搞得自己也被杀掉就不好了)。

【注:从大家的评论里提到的“清缓存时系统会报空间不足”这点来看,金山正是通过写入大量垃圾数据这一没什么技术含量的手段,来逼系统清缓存的】

而这两样功能,说实在的都非常非常蛋疼!

先说清缓存,如果金山真的是用写垃圾信息的方法实现的,那么建议你绝对不要用这个功能。

因为 iPhone 的存储芯片是有写入次数限制的。超过一定次数则报废。

虽说正常使用时,3、5 年也不太可能出现把存储芯片写到报废的情况,但没事儿就用大量垃圾信息去虐存储芯片则绝对是不明智的。

而且就算金山有用到什么神奇 API,不需要大量写垃圾信息,没事儿手动去清缓存也是不明智的。

为什么?因为苹果审核时对 App 存储信息的位置有严格规范。为了加快 iCloud 和 iTunes 备份速度,尽量减少需要备份的内容,苹果规定那些非用户生成的,可以再次下载到的内容,必须存放在临时文件夹中。

举个例子:一个符合苹果规范的电子书 App,你所有下载的电子书,都是存放在临时目录下的。当你强制把缓存清掉后,你打开程序会发现你的书都不见了,必须重新下载——没有免费 Wi-Fi 的时候流量可是要钱的哦——当然这还是程序写得比较好的时候。市面上还有很多程序压根就没有处理临时文件夹被系统清掉的情况,这会直接导致程序崩溃、运行不正常等诸多问题。

所以真的没有必要去清缓存,啥时候真的觉得存储空间不够了,就是你清理常年不打开的 App,删除垃圾照片和视频的最佳时机了。

另外没事儿去清内存,也是弊大于利的行为。

你把别的程序从内存里清掉,结果是下次你用那个程序时,所有数据都要重新载入一遍。从固态存储载入数据是很慢的!而且也有人做过测试,这样也是更加费电的

已经有无数前人呼吁过无数遍,内存空在那里并不会让你的 App 变快!这叫浪费!内存不够用的时候系统自然会帮你清理的!为什么要逼系统在没有必要的时候做没有必要的事情呢?这不是蛋疼是什么。

注:Android 和 iOS 的情况略有不同。因为 Java 的 GC (垃圾回收)机制,当 Android 的剩余内存极度不足时,程序性能可能真的会受影响。那么 Android 上清内存究竟利大还是弊大呢?答案是我也不知道!因为它像 Windows 一样“自由”,随便一个不按常规出牌的 App 就有可能带来完全不同的结果……这么纠结且与本题无关的事情,我就不深入讨论了。

至于 App Store 上烂了大街的电池管理类 App 是否真的能优化电池寿命,请看完下面的文字自己判断吧。

苹果在电池管理方面的科技实力是这样的:

大多数厂家的量产产品(包括 IBM 这种科技大牛)电池充放电寿命还徘徊在 300 次循环的时候,苹果已经通过软硬结合的手段做到 500 次循环了(这事儿发生在 2008 年,要是我没记错的话,那年的 Macbook Pro 发布时的 Keynote 里有简单的介绍。现在随着各方面技术的进步,充放循环普遍已经达到 1000 次的水准)。

而 99% 的在 App Store 上卖电池管理软件的公司或个人在电池管理方面的科技实力是这样的:根据苹果的官方文档给出的电池使用建议,做个几天就能开发完的 App 来“指导”用户该如何“管理”电池。

我不是说苹果的电池管理算法就是业界第一,但如果真有哪个公司有本事仅通过软件优化就给苹果的电池再增加 100 次充放循环,那这个技术肯定早就被各大硬件厂家高价买去写入电池管理芯片了,还用做 App 来卖?

请接受用了两年以后电池寿命下降的现实吧。

题外话:

我不是针对某个公司或个人,但我很反感此类软件。在我眼里就是“骗子”。

只要稍微动动脑子就知道,XX 和苹果,谁更了解 iOS,谁更了解 iPhone。

可偏偏就有人相信“苹果故意缩短了 iPhone 的电池寿命来骗你升级”的阴谋论,而 XX 才是惩恶除奸的大英雄!

这个世界上会轻易相信这类阴谋论的人真的非常多,利用人们“无法验证无效就是有效”心理的商机也真的很多。如果不担心“生屁眼没儿子”的话,真的满地都是“创业”机会。。。不好意思扯远了。

P.S. 我记得清内存原来是有 API 的,现在似乎被干掉了?也可能原来就一直是给 Mac 用的,不好意思记不清了。如哪位高人记得,请指教!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

相关