我正在构建一个应用程序,需要从许多http源收集数据。有时,这些来源的数量可能最终为700,导致总共35 MB。
为了避免每次需要时都下载数据并避免向用户收取大笔费用,我认为最好在第一次传递后将结果存储到SQLite Core Data数据库中,然后再执行根据需要在本地提出请求。
我不是在搜索存储下载数据时避免崩溃的最佳方法。我使用最多7个http同时请求的操作队列下载数据,我担心在同时从2个线程访问同一个托管对象上下文时可能会遇到崩溃,因为我们讨论的是物理磁盘访问存储在数据库中,事情可能会变得复杂。
我只想了解存储这些类型数据然后在其中执行快速搜索的良好做法,而不会因多线程问题而导致应用程序一直崩溃。
提前谢谢。
答案 0 :(得分:1)
您不应该有2个线程访问相同的NSManagedObjectContext
。每个线程都应该有自己的NSManagedObjectContext
,您应该在必要时使用mergeChangesFromContextDidSaveNotification:
合并上下文。多线程和核心数据可能很棘手,所以你需要跨越你所有的T和点你所有的我,但它应该是可能的。 iOS5为锁定等NSManagedObjectContext
带来了更好的多线程支持,但我还不熟悉它,但如果您的目标是iOS5,请查看类引用的Managing Concurrency部分,iOS5之前的任何东西都需要有多个MOC。
此外,我相信在移动网络上,iOS会限制设备同时拥有最多2个并发HTTP请求。