我已经阅读了很多博客,推荐使用以下模式在多个线程中使用核心数据。我不得不使用NSFetchdResultsController来获取CoreData中的所有记录。因为它会在主线程(main moc)中运行,它会阻塞主线程吗?如果我想获取一些记录,我可以使用临时背景MOC来获取?以及如何做到这一点?做这个策略,使用多线程核心数据会阻塞主线程?
0
A
回答
0
您通常在NSFetchedResultsController的获取请求上配置批处理。然后,当你在NSFetchedResultsController中执行提取操作时,它又执行提取请求,该请求非常小,因为它基本上只提取对象标识而没有提取数据。稍后,当访问结果中的某个对象(通常在-tableView:cellForRowAtIndexPath :)中时,将获取第一批次。这个提取也需要很少的时间(如果配置足够小的批量大小)。当您滚动并访问不在批处理中的第一个对象时,会提取下一批,等等。这样在主线程上不会执行大的提取。
此方法和您选择的模式存在一个问题。出于某种原因,在子上下文中执行获取请求时,批处理不起作用。它仅适用于直接连接到持久存储协调器的上下文。
相关问题
- 1. 多线程核心数据
- 2. 核心数据多线程使用
- 3. 多线程核心数据:'主'上下文线程
- 4. 更新tableView不会阻塞主线程
- 5. NSTImer事件会阻塞主线程吗?
- 6. 队列阻塞主线程
- 7. MaxDegreeOfParallelism阻塞主线程?
- 8. NSTask阻塞主线程
- 9. NSoperationQueue阻塞主线程
- 10. 多线程 - 线程每个核心
- 11. 核心数据和多线程编程
- 12. 为什么主线程的Looper.loop()不会阻塞UI线程?
- 13. 核心数据,通知在主线程
- 14. 线程只阻塞第一个线程
- 15. STA线程模式线程也会阻塞winform UI线程?
- 16. GKSession调用是否阻塞主线程?
- 17. iPhone核心数据和多线程
- 18. 多线程核心数据 - NSManagedObject无效
- 19. 多线程核心数据iOS崩溃
- 20. 多线程违规核心数据
- 21. 多线程核心数据 - persistentStoreCoordinator vs parentContext
- 22. 核心数据代码和多线程
- 23. 残破的多线程核心数据
- 24. MessageBeep线程阻塞
- 25. 阻塞线程 - Java
- 26. 非阻塞线程
- 27. Java线程阻塞
- 28. 阻止阻塞的线程阻塞
- 29. 多线程和多核心
- 30. 策略多线程应用程序
如果主线程正在运行,那么是的,它会阻塞UI,但是您可以从bg线程的核心数据中获取结果。 – danypata
如何在后台线程中获取结果并通知主moc? – NOrder
在GCD中有很多关于此的教程,但是当您使用线程和CoreData时,必须非常小心ManagedObjectContext。基本上每个线程都有自己的托管对象上下文,并且您可以在后台线程上获取/处理数据,然后将结果发布到主线程上。 – danypata