核心数据和大文件下载
Posted
技术标签:
【中文标题】核心数据和大文件下载【英文标题】:Core data and large files downloads 【发布时间】:2012-04-19 20:43:05 【问题描述】:我将一些 PDF 存储到 NSManagedObject
类型为 NSData
的属性中。我已经为该属性设置了“使用外部存储”,它工作得很好。我遇到的问题是,当 PDF 非常大时,应用程序会因为内存不足而崩溃。有没有办法将数据块直接保存到磁盘?我已经使用了refreshObject:mergeChanges:
,但即便如此,我必须将数据保存到内存中,直到完整下载完成(只有这样我才能调用refreshObject:mergeChanges:
)来故障属性并释放我的内存。当然,对于大型文档来说,为时已晚,在我有机会这样做之前它就崩溃了。
【问题讨论】:
【参考方案1】:我想如果我处于你的位置,我会获取传入的 PDF 文件 NSInputStream
并使用 NSOutputStream
将其直接写入磁盘。
至于核心数据,我认为不适合用于您不打算完全放入内存的文件; Apple 没有为我们提供从通过核心数据保存到磁盘的文件中获取 NSInputStream 的选项(无论如何我都知道)。在这种情况下,我只需将文件的位置保存在核心数据中,并在该文件路径出错后,从该保存的路径创建一个NSInputStream
。
它的抽象程度比大多数开发人员喜欢的要低一些,但最好控制任何可能导致内存不足崩溃的东西。
【讨论】:
为什么我被否决了?如果我错了,请有人纠正我。以上是关于核心数据和大文件下载的主要内容,如果未能解决你的问题,请参考以下文章