【问题标题】:NSDocument and NSFileWrapper: strategy to reduce memory footprint?NSDocument 和 NSFileWrapper:减少内存占用的策略?
【发布时间】:2014-01-08 15:41:12
【问题描述】:

基于Apple Docs,使用带有NSDocument 的文件包的推荐做法似乎是在自定义NSDocument 实现中保留对根NSFileWrapper 的引用。

我的问题:这是否意味着我的文档最终会占用两倍的内存?

想象一个带有单个NSString 实例变量text 的简单文档。假设文本可以很大。

readFromFileWrapper:… 中,我从文件包装数据中读取NSString 并将其存储在text 中。然而,由于文件包装器是一个实例变量,它的原始 NSData 仍然存在,尽管我只需要 NSString 版本。

我读完后有什么反对放弃NSFileWrapper的说法吗?

编辑:这在考虑 iOS 和 UIDocument 时更加有趣。我的文档可能包含数百张图片。

【问题讨论】:

    标签: cocoa nsdocument uidocument nsfilewrapper


    【解决方案1】:

    这是一个很好的问题,但我会直截了当地回答。

    首先,不要过早优化。如果您所拥有的只是相对较小的文件,那么您不必担心这一点。您应该让您的应用正常运行。

    如果在您的应用运行后,您发现您的文件往往非常大(例如数百兆字节),您可能会考虑对此进行优化。

    请记住,今天的机器通常有 8GB 或更多的 RAM。需要大量数据来填充它。此外,使用虚拟内存,NSFileWrapper 将映射到数据文件中,这意味着它们至少会在被读取时驻留在内存中,但之后它们可以以零成本被分页(它们不需要写回磁盘,因为它们已经在磁盘上)。

    被占用但无需磁盘访问即可释放的内存本质上是空闲内存。

    因此,再次强调,当您没有实际表现不佳的真实测试用例时,不要尝试进行优化,因为系统已经进行了令人难以置信的优化,如果您在无法测试的情况下优化自己,您将可能会使事情变得更糟。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      • 2017-05-19
      • 2016-11-09
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      相关资源
      最近更新 更多