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