根据Apple Docs,使用NSDocument
文件包的建议做法似乎是在自定义NSFileWrapper
实施中保留对根NSDocument
的引用。
我的问题:这是不是意味着我的文档内存占用量最多两倍?
想象一个带有单个NSString
实例变量text
的简单文档。假设文本可能非常大。
在readFromFileWrapper:…
中,我从文件包装器数据中读取NSString
并将其存储在text
中。但是,由于文件包装器是一个实例变量,它的原始NSData
仍然存在,尽管我需要的只是NSString
版本。
有没有什么可以反对在我读完后放弃NSFileWrapper
?
编辑:在考虑iOS和UIDocument
时,这会更有趣。我有一份可能有数百张图片的文件。
答案 0 :(得分:2)
这是一个很好的问题,但我会直截了当地回答。
首先,不要过早优化。如果您拥有的只是相对较小的文件,那么您不必担心这一点。你应该让你的应用运行起来。
如果您的应用程序正常运行,您发现文件往往非常大(例如,数百兆字节),您可能会考虑优化它。
请记住,今天的机器通常拥有8GB或更多的RAM。需要大量数据来填补这一点。此外,对于虚拟内存,NSFileWrapper将映射到数据文件中,这意味着它们至少在读取时会占用内存,但之后它们可以零成本分页(它们不需要要写回磁盘,因为它们已经在磁盘上了。)
占用但可以在没有磁盘访问的情况下释放的内存基本上是可用内存。
所以,再次,当你没有一个真正表现不佳的真实测试用例时,不要尝试进行优化,因为系统已经非常优化,如果你自己优化而不能测试,你会可能会让事情变得更糟。