0

我将一些 PDF 存储到NSManagedObjecttype 的属性中NSData。我已经为该属性设置了“使用外部存储”,它工作得很好。我遇到的问题是,当 PDF 非常大时,应用程序会因为内存不足而崩溃。有没有办法将数据逐块直接保存到磁盘?我已经使用了refreshObject:mergeChanges:,但即便如此,我必须将数据保存到内存中,直到完整下载完成(只有这样我才能调用refreshObject:mergeChanges:)才能使属性出错并释放我的内存。当然,对于大型文档来说,为时已晚,在我有机会这样做之前它就崩溃了。

4

1 回答 1

0

我想如果我处于你的位置,我会获得NSInputStream传入的 PDF 文件并使用 anNSOutputStream将其直接写入磁盘。

至于核心数据,我认为不适合用于您不打算完全放入内存的文件;Apple 没有为我们提供从通过核心数据保存到磁盘的文件中获取 NSInputStream 的选项(无论如何我都知道)。在这种情况下,我只需将文件的位置保存在核心数据中,并在该文件路径出错后,NSInputStream从该保存的路径创建一个。

它的抽象程度比大多数开发人员喜欢的要低一些,但最好控制任何可能导致内存不足崩溃的东西。

于 2012-04-19T23:56:16.270 回答