在 iOS 应用程序上保存大文件

Posted

技术标签:

【中文标题】在 iOS 应用程序上保存大文件【英文标题】:Save big files on an iOS application 【发布时间】:2011-07-08 21:29:50 【问题描述】:

我想知道为 ios 应用程序存储大文件的最佳方式是哪种(Apple 指南或常识建议的方式)..

我的意思是例如保存游戏(可以是 500kb),因此考虑 plist 是不可行的。

我应该使用普通的 Cocoa 文件管理 API 来保存它吗?标准的stdiofopenfwrite 等等)呢?

【问题讨论】:

看起来已经有一个 API 可以将您想要的任何内容写入文件。 ***.com/questions/1526416/iphone-writing-binary-data我不确定是否有限制;至少我什么都没找到。 【参考方案1】:

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

    让您的应用保持响应:只保存更改的内容。如果您不必一次全部保存 500k,而只是更改了一小部分,您可能需要考虑使用 sqlite 或多个较小的文件。 适度使用设备资源:如果您的应用占用了过多的可用存储空间,用户更有可能将其删除。 使用最适合您的上述 1 和 2 方法的 API。如果特定 API 不能改善用户体验,那么就没有必要再花大力气了。

根据我的经验,大文件操作往往相对慢,但 cpu 相对快,所以如果你有大量文本要保存,使用zlib 压缩它以保存效果很好(文本压缩率很高,zlib 非常快)。

【讨论】:

【参考方案2】:

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

这是使用 NSFileManager 定位应用的 Documents 目录的一种方法:

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

【讨论】:

我可以使用标准 I/O 轻松管理所有内容,我主要担心文件存储在哪里,也许有限制或其他什么?我真的不知道应用程序实际上是如何由 iOS 管理的(它的工作目录或“数据”目录或其他) 使用NSFileManager 定位您应用的 Documents 目录并将您的数据写入其中。每个应用程序在文件系统中都有自己的小空间,您无法在该空间之外读取或写入。当用户同步他们的设备时,将备份 Documents 目录,这也很有用。添加到上述答案的示例。

以上是关于在 iOS 应用程序上保存大文件的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上打开多个领域文件

如何使用 Objective C 在 iOS 上本地下载和保存文件? [复制]

通过浏览器中的 Javascript 在 iOS 上保存 Zip 文件

是否可以在 App 沙箱之外的 iOS 上保存录制的音频文件?

AS3将文件保存在iOS上的可访问位置

iOS 文件路径及数据保存