1

我现在试图弄清楚我所有的核心数据都是在主线程上管理的,只有一个上下文。我使用了仪器并注意到保存操作阻塞了主线程很长一段时间。我想使用 GCD 在后台线程上运行我的保存操作

现在我了解如何通过创建新线程/上下文来设置此过程并监听“保存”通知以合并回主线程。

但是当我创建一个新上下文时,主线程上下文中的所有更改都需要插入/合并到新上下文中,否则它不会有任何可保存的东西?我似乎可以找到任何例子。

例如在我的主要背景下:

  • 插入 2x 用户
  • 删除了 3 个墙贴
  • 更新了一些朋友关系。

现在我如何让我的背景上下文知道这些变化?

在应用程序启动时创建后台上下文并让它在主线程上监听 NSManagedObjectContextObjectsDidChangeNotification 以不断保持同步是否有意义?

4

2 回答 2

1

在 iOS5 中,您可以使用新的并发类型轻松做到这一点。如果使用 NSPrivateQueueConcurrencyType 创建上下文,则不会阻塞主线程。但是您必须访问传递给 managedObjectContext:performBlock 方法的块内的上下文。

于 2012-05-27T14:41:01.717 回答
0

您不能在线程之间传递 NSManagedObject 实例。如果您在处理大型数据集时遇到困难,您可能需要阅读Marcus Zarra 的这篇文章

于 2012-05-27T13:03:01.293 回答