有沒有辦法創建只在一個線程上運行的GCD隊列? 我想使用該隊列來處理核心數據操作。創建一個Grand Central Dispatch隊列,只能在一個線程上運行Core Data
3
A
回答
4
是;只需創建隊列DISPATCH_QUEUE_SERIAL
(這也是默認值)。但要小心將核心數據操作移到另一個線程上。給定的NSManagedObjectContext
只能用於單個線程,因此您需要兩個上下文,一個用於主線程,另一個用於後臺線程。正確地做到這一點可能需要謹慎。
您可能想要調查UIManagedDocument
(如果這是iOS5),它會爲您完成大部分工作。至少您應該閱讀其文檔,以便了解如何使用父級和子級環境進行多線程。
0
當創建一個託管對象上下文時,您可以指定它的併發類型。如果您指定了NSPrivateQueueConcurrencyType或NSMainQueueConcurrencyType,那麼MOC已經負責在自己的線程上運行。具體而言...
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
// Do other MOC initializations stuff...
[moc.performBlock:^{
// All code in this block will run in the proper thread for the Managed Object Context.
}];
FWIW,NSMainQueueConcurrencyType的工作原理是一樣的,但它被連接到主隊列。您不能在使用NSConfinementConcurrencyType創建的MOC上調用performBlock,創建和所有工作必須發生在同一個線程中。在這種情況下,你需要創建自己的隊列。
相關問題
- 1. Grand Central Dispatch應該創建多少個線程?
- 2. 用Grand Central Dispatch(GCD)創建N個線程
- 3. 使用Grand Central Dispatch「Throttle」指令隊列
- 4. Swift - Grand Central Dispatch Class
- 5. Grand Central Dispatch與Cilk ++
- 6. Grand Central Dispatch(GCD)和CoreData
- 7. 雙核iPad(A5)= Grand Central Dispatch?
- 8. Swift - Grand Central Dispatch vs Blocks/Closures
- 9. Grand Central Dispatch等效於omp_get_thread_num
- 10. 如何在iPhone上設置定期功能才能在Grand Central Dispatch中運行?
- 11. Grand Central Dispatch中的線程數和線程數
- 12. Grand Central Dispatch。如何運行一個異步組,等待,然後運行另一個,再等待,然後完成?
- 13. Grand Central Dispatch:如何等待塊的隊列完成?
- 14. 如何在Grand Central Dispatch中創建死鎖?
- 15. 如何在iPhone上檢測Grand Central Dispatch功能支持?
- 16. 用於Visual Basic的Grand Central Dispatch?
- 17. Qt中有什麼類似Grand Central Dispatch?
- 18. 基於Grand Central Dispatch(GCD)的Web框架?
- 19. Grand Central Dispatch(GCD)調度源標記
- 20. Grand Central Dispatch尋找不同的方法
- 21. Grand Central Dispatch沒有顯示NSLog語句
- 22. 如何從Grand Central Dispatch獲取數組?
- 23. 我是否正確使用Grand Central Dispatch?
- 24. 使用Grand Central Dispatch(GCD)時獲取OSSpinLockLock
- 25. 創建一個線程隊列
- 26. Grand Central Dispatch - 在加載時顯示第一張圖片?
- 27. iphone - 可以在Grand Central Dispatch的輔助線程上使用usleep嗎?
- 28. 如何在發佈時清空並完全釋放Grand Central Dispatch隊列?
- 29. 我們爲什麼從線程中移出在Grand Central Dispatch中調用閉包?
- 30. 正確使用具有多個UIActivityIndicatorViews的Grand Central Dispatch
這個答案似乎已過時。從文檔:「串行隊列(也稱爲私有調度隊列)按照它們被添加到隊列中的順序每次執行一個任務。當前正在執行的任務運行在不同的線程上(**,其可以從任務到任務**),由調度隊列管理「 – Andreas