# Marco Arment：苹果不应该打击本地存储

- 作者：积木
- 发布时间：2011-10-15 07:00
- 分类：公司
- 原文：https://www.ifanr.com/57178

[![icloud](https://s3.ifanr.com/wp-content/uploads/2011/10/icloud_thumb.jpg)](https://s3.ifanr.com/wp-content/uploads/2011/10/icloud.jpg)

通过 iCloud，苹果用户拥有了一个无缝的云端，这是 iOS5 来临之后的一大福音。但是在云端到来之后，苹果似乎要打击本地存储，这给开发者和用户带来了新的麻烦。Instapaper 的开发者 Marco Arment 在[自己的博客](http://www.marco.org/2011/10/13/ios5-caches-cleaning)中讲到这个问题。

最近，许多开发者收到了苹果的信件：

> 因为 iCloud 将每日通过 Wi-Fi 为用户的 iOS 设备备份，因此，将你应用存储的数据最小化，保证最好的用户体验，是很重要的。
> 
> 除了购买的音乐、应用、图书和摄影图片，以及设备设置之外，你应用的根文件夹中的一切，包括 Documents 文件夹，都会备份到 iCloud。
> 
> 储存在应用 Bundle、caches 文件夹和 temp 文件夹中的数据不会备份到 iCloud。你的应用应根据 [iCloud 数据存储指导](http://developer.apple.com/icloud/documentation/data-storage/)来存储数据。

根据新的指导原则，可重新下载和重新生成的数据存储在应用的缓存文件夹（Caches）中，这包括杂志，报纸和地图这些应用的数据缓存和可下载内容。

对于 instapaper，这本来不应该是一个问题，因为它的数据本来就存储在缓存文件夹（Caches）中，Marco Arment 这样做是为了保证比较好的用户体验：连接 iTunes 的时候无需备份，这不会拖慢同步速度，也不会增大电脑上的备份文件。这些数据在用户重新恢复系统的时候会删除，但这种情况比较少。

现在，苹果限制这些数据必须存储在缓存文件夹中。表面看起来这似乎没有问题，但是 iOS5 之中有一个很重要的改变，缓存文件夹（Caches）在设备存储空间少的时候会自动清除。

在 iOS5 发布之前，已经有开发者反应自己设备中 instapaper 数据的丢失。

[![ios5-caches-cleaning-tweet](https://s3.ifanr.com/wp-content/uploads/2011/10/ios5-caches-cleaning-tweet_thumb.jpg)](https://s3.ifanr.com/wp-content/uploads/2011/10/ios5-caches-cleaning-tweet.jpg)

Marco 认为，这种毫无预兆的清除会给许多应用带来了麻烦：离线阅读网页的应用如 Instapaper ；电子书和漫画书应用；Podcast 客户端，离线 Wiki 应用；离线地图应用。

虽然有了 iCloud，用户并不会丢失数据，但是在实际生活中会出现问题。设想一个用户要长途旅行，他在 iPad 里面塞满了电影和图书，压缩了存储空间，于是系统开始清除缓存数据。当用户打开 instapaper 的时候，他会发现自己的文章全部不见了。

对于用户和开发者来说，这是糟糕的事情，用户将无法阅读已经下载的文章，他会认为应用本身出了问题，或者认为设备本身出了问题。更糟糕的是，从云端重新下载数据并不总是一个好主意，尤其是在缺乏 WiFi 或者数据传输缓慢的地方。

即使云端传输很快的环境下，毫无预兆的删除数据仍然是一个问题。

> 当用户用 Instapaper 存储文章，在 iBooks 中获取图书，或者用 Instacast 下载 podcast 的时候，他们希望应用下次启动的时候，这些东西仍然在那里。即使从技术上来说，这是可以重新下载的，但用户将这些东西视为他们自己的数据——他们将它放在那里，应当在他们认为合适的时候自己移除。
> 
> 当清理工具将它删除后，看起来是应用出错并删除了他们的数据。用户不知道这是 iOS5 做的——可以理解的是，他们将责怪应用开发者。尽管这不是我们的错误，但这肯定会成为我们的问题。
> 
> 应该有一个文件存储位置，与 iOS5 发布之前 Caches 的作用相同：它不会备份到 iTunes 或 iCloud，它不会同步，除非删除应用，否则它永远不会被删除。
