我已经阅读了许多建议在多线程中使用以下模式的核心数据的博客。
但问题是如果在应用程序启动时我必须加载很多记录,我必须使用 NSFetchdResultsController 来获取 CoreData 中的所有记录。因为它将在主线程(main moc)中运行,它会阻塞主线程吗?如果我想获取一些记录,我可以使用 Temporary Background MOC 来获取吗?怎么做?
您通常在 NSFetchedResultsController 的获取请求上配置批处理。然后,当您在 NSFetchedResultsController 中执行 fetch 并依次执行 fetch 请求时,该请求非常小,因为它基本上只获取对象 ID 而没有数据。稍后,当访问结果中的某些对象时(通常在 -tableView:cellForRowAtIndexPath:) 中,将获取第一批。此获取也需要很少的时间(如果您配置足够小的批量大小)。当您滚动并访问不在批次中的第一个对象时,将获取下一个批次,依此类推。这样就不会在主线程上执行大提取。
这种方法和您选择的模式存在一个问题。出于某种原因,当在子上下文中执行获取请求时,批处理不起作用。它仅在直接连接到持久存储协调器的上下文中有效。