[英]Use global managed object contexts to support concurrency
在閱讀開發人員文檔時,我還沒有找到答案。
在Core Data
使用主隊列和私有隊列上下文時,使用全局NSPrivateQueueConcurrencyType
和NSMainQueueConcurrencyType
上下文是一個很好的策略,我可以在整個應用程序中以及應用程序的整個生命周期訪問NSMainQueueConcurrencyType
上下文?
或者,是否應該在每次需要使用NSManagedObjectContext
時創建一個新實例?
我已經使用了此文檔,但無法回答問題。
在大多數情況下,當前的最佳實踐是從NSPersistentContainer
開始。 它的方法指出了處理托管對象上下文的良好實踐。
NSPersistentContainer
具有屬性viewContext
,該屬性使用主隊列並發。 顧名思義,它可以直接與UI一起使用,也可以在主隊列上使用。 在這些情況下,請使用此上下文。 不要創建新的主隊列上下文。
它還有兩種方法,可以通過newBackgroundContext()
和performBackgroundTask
在私有隊列上進行后台工作。 在大多數情況下,當您需要進行后台工作時可以使用這兩種方法中的任何一種,而不必費心保存對長期存在的后台上下文的引用。 需要注意的是,由於它們使用單獨的后台隊列,因此一個后台上下文有可能與另一個后台上下文同時執行。 如果您認為這種情況可行,則可能需要保留背景上下文以避免這種可能性。 否則,您的背景上下文可能需要合並對其他背景上下文所做的更改,而這些更改可能很快就會變得難看。
以上所有情況都有例外,但這是一個很好的起點。 如果由於某種原因這不適合您的應用,請返回另一個問題,詳細說明原因。
我建議您在不同的上下文中進行編寫,然后將其合並回去。
作為一個好習慣,我可以建議使用MagicalRecord進行安裝。
具體來說,他們將默認上下文用作RootSavingContext的子級 。 然后,所有寫入進入新上下文 ,然后合並到根上下文中。
這樣,可以在主線程中使用默認上下文並獲取適當的更新通知,例如,與FetchedResultsController一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.