首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免NSFileWrapper在编写文件时使用大量内存?

如何避免NSFileWrapper在编写文件时使用大量内存?
EN

Stack Overflow用户
提问于 2015-06-19 17:02:58
回答 1查看 338关注 0票数 3

我有一个应用程序,它使用NSFileWrapper来创建用户数据的备份。此备份文件包含文本文件和媒体文件(此处与压缩无关)。有时这些备份文件会变得相当大,超过200 MB的大小。当我调用NSFileWrapper -writeToURL...时,它似乎将整个内容作为编写过程的一部分加载到内存中。在旧设备上,由于内存限制,这会导致我的应用程序被系统终止。

是否有一种简单的方法可以避免NSFileWrapper将所有内容加载到内存中?我已经阅读了所有的NSFileWrapper问题,在这里,我可以找到。对于如何解决这个问题,有什么建议吗?

以下是备份文件的当前文件结构:

BackupContents.backupxyz user.txt - folder1 - audio files asdf.caf asdf2.caf - folder2 - audio files asdf3.caf

再次,请不要告诉我压缩我的音频文件。这只是一个有缺陷的设计的创可贴。

似乎我可以使用NSFileManager将所有文件移动/复制到一个目录中,然后将该目录变成一个包。我该走那条路吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-19 17:40:50

NSFileWrapper树被写入磁盘时,它将尝试执行原始文件到新位置的硬链接,但前提是为originalContentsURL提供一个参数。

听起来您正在以编程方式构建文件包装器(用于备份场景),因此您的文件可能分散在整个文件系统中。这意味着当您writeToURL时,您没有originalContentsURL。这意味着硬链接逻辑将被跳过,文件将被加载,从而可以被重写。

因此,如果您想要硬链接行为,您需要找到提供originalContentsURL的方法。这是通过向初始的writeToURL调用提供适当的URL来实现的。

或者,您可以尝试为常规文件对NSFileWrapper进行子类化,并为它们提供内部保存的NSURL。您需要重写writeToURL才能将这个新的URL传递给super,但是该URL应该足以触发硬链接代码。然后,您可能希望将NSFileWrapper的子类用于您想要硬链接到的大型文件中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30943542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档