我将一些PDF存储到NSManagedObject
类型的NSData
属性中。我为该属性设置了“使用外部存储”,它运行良好。我遇到的问题是,当PDF非常大时,应用程序崩溃,因为内存不足。有没有办法将数据块直接保存到磁盘?我已经使用refreshObject:mergeChanges:
但是即便如此,我必须将数据保存到内存中,直到完整下载完成(然后我才能调用refreshObject:mergeChanges:
)来破坏属性并释放我的内存。当然对于大型文档来说,这是迟到的,它在我有机会之前崩溃了。
答案 0 :(得分:0)
我想如果我在你的位置,我会获得NSInputStream
即传入的PDF文件并使用NSOutputStream
将其直接写入磁盘。
至于核心数据,我认为不适合用于你不打算完全故障的文件; Apple没有给我们提供从核心数据保存到磁盘的文件中获取NSInputStream的选项(无论如何我都知道)。在这种情况下,我只会将文件的位置保存在核心数据中,并在该文件路径出错后,从该保存的路径创建NSInputStream
。
它在抽象方面比大多数开发人员更喜欢,但最好是控制任何可能导致内存崩溃的事情。