我已經閱讀了大量有關後臺核心數據流程的博客,但我並沒有接近理解如何最好地管理許多BG核心數據任務一次全部觸發並通知返回到未定義時間的主線程MOC。多個NSManagedObjectContexts - 防止競爭條件和死鎖
我知道你應該通過使用[context performBlock
我得到了一些不錯的異步任務完成沿訂閱NSManagedObjectContextDidSaveNotification
有1 NSManagedObjectContext
每NSThread
和。
這就是說,我跑了很多任務異步,我不100%知道什麼時候有人會重疊,我在的形式觀察比賽條件...
- BG MOC 1襯托它的任務
- BG商務部2上的任務
- BG MOC 2分完成任務,並保存發送通知
- BG MOC 1分完成任務,然後擦去BG MOC 2S襯托改變
我的整體問題是如何解決多個MOC中的競賽條件?
如果正確的行爲是讓每個線程1個MOC ..我可以創建一個NSThread伊娃並把我的核心數據的工作推上了嗎?這樣我可以有一個與自身同步的MOC?
我讀過一個NSLock可能是避免某些代碼被同時從多個線程訪問的解決方案..但我不知道我應該鎖定什麼?保存上下文方法?持久存儲(似乎使多線程毫無意義)?
最後,我可以標記/編號/命名我的MOCs嗎?這樣,如果我知道其他任務正在運行,我可以存儲通知並按照實例化的順序處理它們以確保沒有數據被覆蓋?建議每個線程
很好的回答,非常感謝。我沒有在我的實現中使用'NSOperation' /'NSOperationQueue',所以我會從那裏開始。很高興能在我所有的狡猾想法上得到堅定的回答。 – Magoo 2014-12-03 08:27:47
「NSOperation或類似的結構。你創建一個MOC而不是這個結構」應該是「在這個結構中」嗎? – 2014-12-03 10:13:50
謝謝@IanDundas,更正。 – 2014-12-03 15:26:23