簡體   English   中英

核心數據3受管對象上下文

[英]Core Data 3 Managed Object Contexts

在我的iOS應用程序中,我有一個用於后台線程和主線程的托管對象上下文。 問題是,我獲取某個實體的核心數據調用可能需要3-5秒左右,並且停留在主線程上非常可怕,但是當我將其放在單獨的“受管對象上下文”上的后台線程上時,僅用於檢索數據。僅用於在后台檢索數據的后台線程會出現死鎖。

我的問題是:有沒有一種方法可以在后台線程中使用多個托管對象上下文? 我現在正在做的事情是否應該工作,而我只是在某個地方做錯了什么,例如在上下文之間傳遞對象(我檢查過我什么都沒看到)?

受管對象上下文不是線程安全的,因此,如果您需要對Coredata對象進行任何類型的后台工作(即長時間運行的導入/導出功能而不會阻塞主UI),則需要在后台線程上進行。

在這些情況下,您將需要在后台線程上創建一個新的托管對象上下文,遍歷coredata操作,然后將所做的更改通知主上下文。

在這里查看示例

蘋果文檔:

使用線程限制來支持並發

建議使用Core Data進行並發編程的模式是線程限制:每個線程必須具有自己的完全私有的托管對象上下文。

可以采用兩種方式采用該模式:

為每個線程創建一個單獨的管理對象上下文,並共享一個持久存儲協調器。 這是通常推薦的方法。

為每個線程創建一個單獨的管理對象上下文和持久性存儲協調器。 這種方法提供了更大的並發性,但付出了更大的復雜性(特別是如果您需要在不同上下文之間傳達更改的情況)和增加的內存使用量。

暫無
暫無

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

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