gpt4 book ai didi

ios - 如何避免 NSFileWrapper 在写入文件时使用大量内存

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:27 25 4
gpt4 key购买 nike

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

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

这是备份文件的当前文件结构:

BackupContents.backupxyz
用户.txt
- 文件夹 1
- 音频文件
非洲自卫队.caf
asdf2.caf
- 文件夹2
- 音频文件
asdf3.caf

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

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

最佳答案

NSFileWrapper 树被写入磁盘时,它会尝试将原始文件硬链接(hard link)到新位置,但前提是您为 提供参数>originalContentsURL

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

因此,如果您想要硬链接(hard link)行为,您需要找到一种方法来提供 originalContentsURL。通过向初始 writeToURL 调用提供适当的 URL,最容易做到这一点。

或者,您可以尝试为常规文件子类化 NSFileWrapper,并为它们提供一个它们在内部挂起的 NSURL。您需要覆盖 writeToURL 以将此新 URL 传递给 super,但该 URL 应该足以触发硬链接(hard link)代码。然后,您希望将 NSFileWrapper 的这个子类用于您想要硬链接(hard link)到的大文件。

关于ios - 如何避免 NSFileWrapper 在写入文件时使用大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30943542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com