文档章节

改善文件管理性能(Improve Your File Management)

Gerry1218
 Gerry1218
发布于 2016/06/15 15:27
字数 999
阅读 44
收藏 0

最小化写入磁盘数据的数量。文件操作相对比较缓慢,包括写入有限寿命的闪存驱动器。

一些特定的提示帮助你减少与文件相关的操作:

  • 写入文件改变的部分或所有的改变,避免因为几个字节写入整个文件。
  • 当定义文件格式,频繁写入分组块的内容时,减少每次写入磁盘时块的总数。(原文:When defining your file format, group frequently modified content together to minimize the overall number of blocks that need to be written to disk each time.)
  • 如果你的数据是由一组随机访问的结构化内容组成,那么使用Core Date持久化存储或者SQLite数据库,特别是如果你维护的数据可能增长超过几兆字节的情况。

避免写缓存文件到磁盘,唯一的例外是当应用程序退出时,你需要写入一些状态信息,用于app下次启动的时候恢复相同的状态。

App Backup Best Practices

你的应用程序不是必须要以任何方式进行备份恢复的操作。带有激活的iCloud账号的设备会在合适的时间备份他们的app数据到iCloud。对于插入电脑的设备而言,itunes执行增量备份app的数据文件。然而,iCloud和iTunes不备份的内容以下目录:

< Application_Home > / AppName.app
< Application_Data > / Library/Caches
< Application_Data > / tmp

为了防止同步花费太长的时间,你需要有选择的放置哪些文件在你的app的home目录。应用程序存储大文件会使备份到itunes或iCloud的进度变慢。这些app会消耗用户的可用存储空间,这可能会导致用户删除这个app或者禁止app的数据备份到iCloud。记住这一点,你应该按照下面的指南存储应用程序数据:

  • 关键数据应该存储在<Application_Data>/Documents directory中。关键数据是无法重新创建的应用程序的任何数据,如用户文档和其他用户生成内容。
  • 支持的文件包括应用程序能够下载生成和需要时能重建的文件,储存应用程序支持的文件的位置取决当前的iOS版本。
    •  在iOS 5.1和以后,支持文件存储在<Application_Data>/Library/Application Support目录并将NSURLIsExcludedFromBackupKey属性添加到对应的NSURL对象使用setResourceValue:forKey:error:方法。(如果您使用的Core Foundation,使用CFURLSetResourcePropertyForKey函数添加kCFURLIsExcludedFromBackupKey键到CFURLRef对象)。应用这个属性可以防止文件被备份到iTunes或iCloud。如果你有大量的支持文件,您可以将它们存储在一个自定义的子目录并且应用扩展属性。
    • 在iOS 5.1和更早的版本,存储支持的文件到<Application_Data>/Library/Caches目录防止它们被备份。
  • 缓存数据可以存储在<Application_Data>/Library/Caches目录,例子文件是你可以把数据库缓存文件、下载的内容(被报纸、杂志、地图等app使用的数据)放在缓存目录。应用程序应该能够很好的处理由于系统释放磁盘空间而删除缓存数据的情况。
  • 临时数据应该存储在<Application_Data>/tmp目录中。临时数据包含你不需要持久保存的任何数据。当你用过后记得删除这些文件,使他们不继续消耗用户的设备的存储空间。

尽管itunes会备份应用程序包本身,它并不是每次同步的时候都会这样做。当设备下一次同步iTunes的时候在设备上购买的app会被备份。之后的同步操作就不会备份了,除非app包改变(例如应用更新)。

关于怎么在app中使用目录的更多的指导,请参看File System Programming Guide.

 

官方文档

 

© 著作权归作者所有

Gerry1218
粉丝 9
博文 81
码字总数 15130
作品 1
杭州
程序员
私信 提问
KDE Plasma 5.3 发布

KDE Plasma 5.3 发布,更好的支持蓝牙,增强了电源管理,改善了 Plasma 部件。同时修复了超过 300 个的 bug。 增强型电池管理: Power management settings can be configured differently ...

oschina
2015/04/29
1K
4
代号为Namoroka -- FireFox 3.6 功能计划公布

在Mozilla FireFox 3.5 “Shiretoko”版发布前两天,3.6版本的开发代号也已经公布:“Namoroka”. 这一版本预计在2010年上半年正式发布,新版将采用Gecko 1.9.2版本的内核,提升性能和管理浏览器...

红薯
2009/06/03
203
0
Apache Archiva 1.3.3 发布

Archiva 是一个管理一个和多个远程存储的软件。它能够与Maven,Continuum和ANT等构建工具完美结合。Archiva提供的功能包括:远程 Repository代理,基于角色的安全访问管理,Artifact分发、维...

红薯
2010/12/20
444
0
【翻译】Apache Hbase新特性--MOB支持(一)

原文链接:http://blog.cloudera.com/blog/2015/06/inside-apache-hbases-new-support-for-mobs/ HBase MOBs特性的设计背景 Apache HBase is a distributed, scalable, performant, consist......

jeff-qq
2017/10/18
800
0
Oracle表空间操作

转载至红黑联盟--http://www.2cto.com/database/201402/278907.html (1) 数据文件查询 Select FILENAME from dbadata_files; SQL> select filename fromdbadata_files; FILE_NAME ----------......

mcluan
2017/06/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部