簡體   English   中英

使用全局托管對象上下文來支持並發

[英]Use global managed object contexts to support concurrency

在閱讀開發人員文檔時,我還沒有找到答案。

Core Data使用主隊列和私有隊列上下文時,使用全局NSPrivateQueueConcurrencyTypeNSMainQueueConcurrencyType上下文是一個很好的策略,我可以在整個應用程序中以及應用程序的整個生命周期訪問NSMainQueueConcurrencyType上下文?

或者,是否應該在每次需要使用NSManagedObjectContext時創建一個新實例?

我已經使用了此文檔,但無法回答問題。

在大多數情況下,當前的最佳實踐是從NSPersistentContainer開始。 它的方法指出了處理托管對象上下文的良好實踐。

NSPersistentContainer具有屬性viewContext ,該屬性使用主隊列並發。 顧名思義,它可以直接與UI一起使用,也可以在主隊列上使用。 在這些情況下,請使用此上下文。 不要創建新的主隊列上下文。

它還有兩種方法,可以通過newBackgroundContext()performBackgroundTask在私有隊列上進行后台工作。 在大多數情況下,當您需要進行后台工作時可以使用這兩種方法中的任何一種,而不必費心保存對長期存在的后台上下文的引用。 需要注意的是,由於它們使用單​​獨的后台隊列,因此一個后台上下文有可能與另一個后台上下文同時執行。 如果您認為這種情況可行,則可能需要保留背景上下文以避免這種可能性。 否則,您的背景上下文可能需要合並對其他背景上下文所做的更改,而這些更改可能很快就會變得難看。

以上所有情況都有例外,但這是一個很好的起點。 如果由於某種原因這不適合您的應用,請返回另一個問題,詳細說明原因。

我建議您在不同的上下文中進行編寫,然后將其合並回去。

作為一個好習慣,我可以建議使用MagicalRecord進行安裝。

具體來說,他們將默認上下文用作RootSavingContext的子級 然后,所有寫入進入新上下文 ,然后合並到根上下文中。

這樣,可以在主線程中使用默認上下文並獲取適當的更新通知,例如,與FetchedResultsController一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM