基于苹果文档,在NSDocument中使用文件包的推荐做法似乎是在自定义NSDocument实现中保持对根NSFileWrapper的引用。
我的问题是:这不意味着我的文档的内存占用量会增加两倍吗?
假设有一个NSString实例变量text的简单文档。比方说,这篇文章可能很大。
在readFromFileWrapper:…中,我从文件包装数据中读取NSString并将其存储在text中。但是,由于文件包装器是一个实例变量,所以它的原始NSData仍然存在,尽管我所需要的只是NSString版本。
在我看完书后,有什么东西反对我放弃NSFileWrapper吗?
编辑:--当想到iOS和UIDocument时,这就更有趣了。我有一份可能有数百张图片的文档。
发布于 2014-01-09 10:00:55
这是个好问题,但我要直截了当地回答。
首先,不要过早地进行优化。如果您所拥有的只是相对较小的文件,那么您还不应该担心这个问题。你应该让你的应用程序正常工作。
如果一旦你的应用程序成功后,你发现你的文件往往很大(比如几百兆字节),你可能会考虑优化它。
记住,今天的机器通常有8GB或更多的RAM。这需要大量的数据来填充。另外,使用虚拟内存,NSFileWrapper将映射到数据文件中,这意味着它们在内存中的驻留时间至少在读取它们的时间内,但在此之后,可以以零成本分页(不需要将它们写回磁盘,因为它们已经在磁盘上)。
占用但可以在没有磁盘访问的情况下释放的内存实质上是空闲内存。
所以,同样的,当你没有真正的测试用例时,不要尝试优化,因为系统已经进行了难以置信的优化,如果你在没有测试的情况下对自己进行优化,你很可能会让事情变得更糟。
https://stackoverflow.com/questions/21000094
复制相似问题