NSDocument和NSFileWrapper:减少内存占用的策略?

时间:2014-01-08 15:41:13

标签: cocoa nsdocument uidocument nsfilewrapper

根据Apple Docs,使用NSDocument文件包的建议做法似乎是在自定义NSFileWrapper实施中保留对根NSDocument的引用。

我的问题:这是不是意味着我的文档内存占用量最多两倍?

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

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

有没有什么可以反对在我读完后放弃NSFileWrapper

编辑:在考虑iOS和UIDocument时,这会更有趣。我有一份可能有数百张图片的文件。

1 个答案:

答案 0 :(得分:2)

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

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

如果您的应用程序正常运行,您发现文件往往非常大(例如,数百兆字节),您可能会考虑优化它。

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

占用但可以在没有磁盘访问的情况下释放的内存基本上是可用内存。

所以,再次,当你没有一个真正表现不佳的真实测试用例时,不要尝试进行优化,因为系统已经非常优化,如果你自己优化而不能测试,你会可能会让事情变得更糟。