核心数据,用什么并发模型?

Core data, what concurrency model to use?

我正在开发 iOS 一个应用程序,它将从多个来源收集大量数据(多达数万个对象,但对象很简单,没有图像)并使用 core 将其保存到我自己的数据库中数据。然后我分析这些数据并将结果显示给用户。

我想知道使用主队列 Nsmanagedobjectcontext 是否有任何好处,或者我使用私有队列是否足够。

我也想知道拥有多个 NSManagedObjectContext 有什么好处,或者一个是否足够?

我目前使用的并发模型只有一个私有队列 nsmanagedobjectcontext 连接到持久存储协调器。所有的数据分析都是在私有队列上进行的,然后我只是将分析后的数据传递给主队列进行展示。在旧设备上 (iPhone 4) 当同时加载太多数据(即从外部数据库下载)时,我的应用程序有时会崩溃,这与我选择的并发模型有关吗?

您目前的做法听起来不错。如果你想让主线程与数据交互,你只需要一个主线程上下文,在你的情况下你不需要,所以没关系。

你的内存管理实际上是不相关的,它更依赖于你一次有多少事情(听起来像一个)以及你试图在任何时候在主内存中保留多少对象(听起来像许多)而不是将它们故障到数据存储中。这是您需要查看/处理的内容。仪器可以帮助您查看内存中保留了多少对象。

至少调用 refreshObject:mergeChanges:NO 进行合并更改,以排除您未使用的任何对象。

此外,请记住您是在移动设备上工作,处理 up to tens of thousands of objects 是服务器更好地处理的工作...