gpt4 book ai didi

objective-c - 保护文件时保存或将整个文件内容保存在内存中时 NSData 是否流式传输?

转载 作者:行者123 更新时间:2023-11-29 13:50:31 24 4
gpt4 key购买 nike

我正在使用 NSData 保护 iOS 4.2 上的文件。该文件刚刚使用网络服务下载到临时文件夹中,现在我想使用 NSData 和以下代码将其复制并保护到最终目的地:

NSData oData = NSData.FromFile ( sSourcePathAndFile );
NSError oError = null;
oData.Save ( sDestPathAndFile, NSDataWritingOptions.FileProtectionComplete, out oError );

我想知道的是:如果文件现在真的很大,NSData 会以 block 的形式保存它,还是会将整个文件加载到内存中,最终耗尽内存并失败?

旁注:如果我备份我的 iOS 设备并恢复到另一台设备, protected 文件是否可以在那里读取?如果是,整个保护对我来说意义不大。

最佳答案

从检查 monotuch 文档(虽然我不是专家)来看,NSData.FromFile 似乎完全映射到 Objective-C:

NSData +dataWithContentsOfFile:

导致整个文件一次加载到内存中。这是根据 this page —“通过从路径指定的文件中读取每个字节的数据对象”,这与 the relevant bit 几乎一字不差。 Apple 的 NSData 引用资料。

似乎没有单点触控等价物,但在 Objective-C 中正确的做法是使用:

NSData +dataWithContentsOfMappedFile:

记录在案here .

iOS 与所有其他操作系统一样具有完全虚拟化的内存子系统,只是缺少页面文件。当您使用 dataWithContentsOfMappedFile: 时,您将文件映射到主内存,导致正常的分页机制在物理 RAM 中保留尽可能多或尽可能少的文件,就像任何其他虚拟化内存池一样。

尽管 dataWithContentsOfMappedFile: 可能会在某些环境中回退到 dataWithContentsOfFile: 上(尽管它不应该在 iOS 上),但系统无法在所有情况下将 dataWithContentsOfMappedFile: 替换为 dataWithContentsOfFile:,因为前者要求文件在磁盘上保持不变在 NSData 对象的生命周期内,后者保证立即读取所有内容,然后允许您根据需要删除或修改原始内容。

希望更多的单点触控专家可以就如何添加 NSData.FromMappedFile 或如何通过其他方式公开此功能(如果有的话)提出建议。

关于objective-c - 保护文件时保存或将整个文件内容保存在内存中时 NSData 是否流式传输?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4876319/

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