核心数据和大文件下载

时间:2012-04-19 20:43:06

标签: iphone objective-c ios ipad core-data

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

1 个答案:

答案 0 :(得分:0)

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

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

它在抽象方面比大多数开发人员更喜欢,但最好是控制任何可能导致内存崩溃的事情。