2011-07-08 36 views
2

我想知道这是最好的方式(一个苹果的指导方针或按常理建议)来存储大文件的iOS应用程序..保存在iOS应用程序的大文件

随着大我的意思是比如一场比赛的节省(可以说,比方说500kb),这样,考虑plists是不可行的。

我应该使用普通的Cocoa文件管理API保存它吗?标准stdiofopen,fwrite,不管)?

+0

看起来好像已经有一个API用于编写任何你想要的文件。 http://stackoverflow.com/questions/1526416/iphone-writing-binary-data我不确定是否有限制;至少我还没有找到任何东西。 – Suroot

回答

3

你的首要任务应该是整体的用户体验,包括:

  1. 让您的应用程序响应:仅保存什么改变了。如果你不必一次保存500k,但只有一小部分发生了变化,你可能需要考虑sqlite或多个较小的文件。
  2. 适度使用设备资源:如果您的应用程序使用了不成比例的可用存储空间量,则用户更可能将其删除。
  3. 使用最适合您的方法的API以上面的1 & 2。如果不改善用户体验,那么使用特定的API就没有意义了。

以我的经验,大文件操作往往是相对慢,但CPU是相对快,所以如果你有文本保存的一大块,使用zlib的压缩它保存作品(文本压缩率很高,zlib非常快)。

2

有很多选择,当然最好的取决于您的要求。如果您愿意,您当然可以使用C标准I/O。如果你将所有的游戏数据放在一个大缓冲区中,NSData的读/写文件方法很容易使用。如果你有一组实现NSCoding的对象,你可以使用NSKeyedArchiver/Unarchiver。

这里有一种方法使用的NSFileManager找到您的应用程序的文件目录:

NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent: @"Documents"]; 
+0

我可以使用标准I/O轻松管理所有事情,我主要担心的是存储文件的位置,可能存在限制或其他问题?我真的不知道应用程序是如何由iOS(其工作目录或“数据”目录或其他)管理的 – Jack

+0

使用[NSFileManager](http://tinyurl.com/4eflxtl)来查找应用程序的Documents目录并写入你的数据在那里。每个应用程序在文件系统中都有自己的小空间,您无法在该空间之外进行读取或写入。当用户同步他们的设备时,Documents目录将被备份,这也是有用的。添加示例以回答上述问题。 – Caleb

相关问题