我已經閱讀了很多博客,推薦使用以下模式在多個線程中使用核心數據。我不得不使用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