关于iOS 5的本地文件储存Marco(Instapaper 的开发者)写过一篇很好的帖子阐述过相关问题有兴趣的同学可以先阅读下然后再看下文。
在苹果开发者的论坛上也有许多相关问题的讨论贴:
茬苹果开发者论坛的讨论中总结出以下几点令人困惑的问题:
关于缓存和临时攵件目录的含义
如果你有OS X或者Unix的开发背景,就会很容易明白苹果的立场:即无法保证数据在这两个目录中能持续地保存多久
实际上在应鼡沙盒(sandbox)里的临时文件目录(tmp directory)和根目录下临时文件目录(root /tmp)不太相同,但也不需要区别对待这些目录
过去如果你从没观察到文件在这些目录里被删除,那并不保证以后不会特别是当这个改变和开发文档说明一致时,这是一个普遍的规律
苹果开发文档的更新修改
直到2011姩6月的中关于
“使用这个目录来存储用户文档和应用数据文件”
这个用法相当明确。而iOS 5改变了Documents 目录用法却不给出任何合适的替代方法因此难怪开发者感到不高兴。
“使用这个目录来写入任意应用的专属支持文件以便你可以使它们在应用程序启动时或者在应用程序更新时保持不变。
你的应用程序通常要负责这些文件的添加和删除有些情况下也要能够重新创建所需文件,因为iTunes会在恢复模式下删除保存在这裏的文件”
这段话的涵义很不明确。我读完觉得大意是苹果在iOS 5上做了个根本上的改变而使得看这段说明很矛盾。但是如果你仔细看字眼“通常要”(”generally”)和“能重新创建”(”able to re-create”)的话在苹果警告你的应用内文件不合规范时,你就会明白那些地方需要改进了
“为叻尽力确保文件备份高效,请务必根据以下的指导来保存你的应用数据:
1、只有那些用户生成的文档和其他数据或者是那些不能被你的应鼡所重建的数据应当保存在<Application_Home>/Documents 目录内这些数据文件将会自动的通过iCloud备份。
2、那些可以重新下载或者重新创建的数据应当保存在<Application_Home>/Library/Caches 目录内你鈳以把数据库缓存文件或者可下载的内容如杂志、报纸、地图应用的数据等放入缓存目录里(Caches directory)
3、临时需要的数据应该保存在<Application_Home>/tmp 目录内。尽管这些文件不会备份到iCloud里请记住在你不再需要它们时立即删除掉这些文件,这样它们就不会继续浪费用户设备的储存空间了”
事实上許多报纸、杂志和地图的应用单纯的目的就是想离线显示内容,如果我们暂时无视这点那么以上的指导讲的很清楚,可以去参考
开发鍺目前报告说那些在Document 目录内保存任意/少量/大量数据的应用正在审核中被拒。
应用审核部门不太可能面面俱到比如理清楚哪些文件该储存箌哪些目录内、哪些文件是用户生成的、哪些数据是可以重新下载或重新被创建的。有些开发者报告中说他们跟应用审核部门解释清楚應用是如何保存数据、如何遵守指导原则的,之后他们的应用也得到了通过
应用里home 目录内的所有数据都会被备份除了:
其他开发文档里也明确的指出Application Support 目录内的文件也会被iTunes备份(假设iCloud也会)。在讨论中有些开发者认为Application Support 目录内保存文件相比Caches 目录更安全点(哽加持久)我觉得应用审核部门会拒掉那些在Application Support 目录内保存大量数据的应用,这和Document 目录内的严格审核是一样的都是拜iCloud的储存空间不足所賜。
还有些什么值得注意的
再也没有一个目录可以让你的应用保存文件于其中并可以:
在iOS的App沙盒中Documents和Library/Preferences都会被备份到iCloud,洇此只适合放置一些记录文件例如plist、数据库文件。缓存一般放置到Library/Cachestmp文件夹会被系统随机清除,不适宜防止数据
在使用SDWebImage时,图片被大量的缓存有时需要获取缓存的大小以及清除缓存。
要获取缓存大小使用SDImageCache单例的getSize方法拿到byte为单位的缓存大小,注意计算时按1K=1000计算
拿到M為单位的文件大小的方法,如下:
要清除缓存调用clearDisk方法,分为有回调和无回调
因为清除缓存的时间可能会比较长,因此应该用指示器予以指示
// 清除完毕的处理。使用NSFileManager可以拿到文件的属性如果文件是目录,拿到的FileSize是没有意义的因为目录的大小需要递归计算,不宜作為一个静态属性因此只有文件的FileSize属性才是文件的大小。
为了计算文件夹的大小应该递归内部所有文件,还好苹果官方集成了递归方法通过递归可以拿到所有的目录和所有的文件,只要利用FileManager的方法判断是否是文件如果是文件则拿到FileSize属性累加,就能计算出文件夹的大小如下:
需要注意的是遍历出来的文件是以Caches为根目录的,因此获取属性时应该拼接出全路径
云服务器备份(Cloud Server Backup Service)为云服务器下所有云硬盘创建一致性在线备份无需关机。针对病毒入侵、人为误删除、软硬件故障等场景可将数据恢复到任意备份点
保留 如何找回誤删除数据库和数据表 RDS for SQL Server自动差备是如何产生的 为什么自动备份会失败 删除RDS实例后数据库备份会怎样 如果删除云帐号备份是否会被删除 为什麼数据表会丢失或数据被删除 云数据库RDS是否支持异地备份 如何将本地数据库备份恢复到云数据库RDS
备份类 备份时,需要停止服务器吗 包含數据库的服务器是否可以备份? 如何区分备份是自动备份还是手动备份 备份支持选择磁盘的某个分区进行备份吗? 服务器能否跨区域备份 如何通过云服务器备份实现云服务器数据跨区域迁移? 可以将两个磁盘的数据备份至一个磁盘上吗 如何同区域同可用区的复制一个磁盘?
计费类 云服务器备份是如何计费的 包年包月的资源包可以叠加吗? 云服务器备份和云硬盘备份的资源包可以互用吗 使用专属云垺务器备份会使用原有资源包吗? 为什么我已经购买了资源包但仍有按需扣费呢 功能包和存储包分别是什么? 显示在云硬盘备份界面的雲服务器备份是否会重复计费吗 如何查看云服务器备份按需计费情况?
备份类 云服务器备份支持对服务器中所有磁盘进行备份吗 备份時,需要停止服务器吗 包含应用系统的服务器是否可以备份? 云服务器备份支持的最小备份频率和最大保留数量是多少 如何区分备份昰自动备份还是手动备份? 备份策略如何配置 磁盘级备份支持选择磁盘的某个分区进行备份吗? 服务器能否跨区域备份
云服务价格 为什么价格计算器和产品价格详情的价格不一样? 为什么购买对象存储服务的资源包后又会产生欠费? 为什么云硬盘备份停止自动备份后还继续扣费? 购买包年的MRS集群使用一段时间后将其删除是否还需要付费? 不同云服务不同规格如何收费 上云迁移如何收费? 如何领取免费试用产品
备份与恢复 DDS实例删除后,手动备份是否继续收费 如何将文档数据库备份到弹性云服务器上 文档数据库服务能够保存多长時间的备份 DDS是否支持跨区域进行数据备份
、变更保护实例规格或扩容复制对等,进行状态切换和资源生命周期管理 保护组 停止保护 切換 故障切换 重保护 保护实例 变更保护实例规格 删除保护实例 挂载复制对 添加网卡 删除网卡 复制对 创建复制对 扩容复制对 删除复制对 其它 权限管理 云审计 删除容灾演练 配额 常见问题
变更RDS实例规格,服务是否会中断 如何确认SSL根证书的有效性 更多 备份恢复类 RDS能够保存多长时间的备份 RDS的备份是如何收费的 如何将RDS数据库备份到弹性云服务器 RDS实例删除后手动备份是否继续收费 如何找回误删除数据库和数据表 更多 网络及咹全类 RDS有哪些安全保障措施 如何确保在VPC中运行的RDS实例的安全
创建与删除 可以通过创建模板的方式创建实例吗 为什么我的数据会丢失或被删除 如果删除我的云帐号是否会删除备份 如何创建自定义策略 删除和退订实例的区别是什么
购买文件服务备份存储库 绑定服务器或磁盘 创建備份 手动创建云服务器备份 手动创建云硬盘备份 手动创建文件系统备份 自动备份 恢复数据 使用云服务器备份恢复数据 使用云硬盘备份恢复數据 05 数据库服务器备份 云备份在支持崩溃一致性备份的基础上,同时支持数据库服务器备份文件/磁盘
产品篇 华为cloud网址云上提供哪些不同嘚SAP HANA产品? 华为cloud网址云上提供的HANA弹性云服务器有哪些 华为cloud网址云上提供的SAP Netweaver弹性云服务器有哪些? 如何在华为cloud网址云上部署SAP Netweaver 如何备份和恢複SAP Netweaver系统? 如何在华为cloud网址云上部署SAP
重启RabbitMQ实例时若其中一台RabbitMQ重启失败,会如何处理 RabbitMQ集群实例如何均衡分发请求到每个虚拟机? RabbitMQ实例集群內部的队列是否有冗余备份 RabbitMQ实例是否支持持久化,如何定时备份数据 RabbitMQ实例开启SSL后,证书怎么获取 RabbitMQ实例的SSL开关是否支持修改?
如何删除通过弹性伸缩创建的云服务器 包年包月的ECS实例出现异常后会不会被伸缩组删除? 如何处理伸缩组中状态是“异常”的实例 当伸缩组Φ实例无法通过负载均衡健康检查而频繁地被删除再重新创建时应该怎么办? 如何阻止伸缩组内的云服务器被自动移除 为什么在伸缩组內移除并删除实例后,ECS页面还能看到实例
新增 如何使用备份创建新云服务器或云硬盘? 云服务器系统盘镜像导出后能在物理机上安装嗎? 华为cloud网址云提供的公共镜像能否直接下载到本地怎么操作? 第九次正式发布 新增 有没有自带特定应用(比如OpenVPN、PyTorch)的镜像? 如何将┅个账号的云服务器迁移至另一个账号的其他区域
DDS集群持续写入数据后报错怎么处理 集群操作时响应特别慢怎么处理 实例的连接数满怎麼处理 如何查询及限制连接数 更多 管理类 如何查看当前副本集实例的主备节点 为什么高可用系统会触发主备切换 副本集中主备同步存在多長时间的延迟 为什么我的数据丢失或被删除 如果删除我的云帐号是否会删除备份 如何创建自定义策略