我的理解是核心數據不是線程安全的,但我對某個特定情況有疑問。假設我在主線程的上下文中創建了一個對象,但是我想要進行一些繁重的計算。所以我把對象發送到另一個線程。這聽起來很糟糕,我是否需要以某種方式複製該對象?如果我將該對象保存在另一個線程的上下文中,那麼它似乎無法從該上下文中獲取有效的對象(我必須先保存到商店嗎?這看起來像是濫用了硬盤)。我使用的神奇紀錄的時刻和流量是這樣的:關於多線程核心數據的澄清
mSaveData = [XXX MR_createEntity];
//Set various properties
//In another method
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
mSaveData.questionId = xxx;
//Set more properties
[[mSaveData managedObjectContext] MR_saveToPersistentStoreAndWait];
}
起初我還以爲我應該使用[mSaveData MR_inThreadContext]
,但該方法返回nil
(也許是因爲對象尚未得救了嗎?)。我目前的方法共享線程之間的上下文(僅用於保存操作),所以它讓我有點不舒服。是否有不同的方法是首選?我應該簡單地派遣回主線程設置屬性並保存?
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/Concurrency.html –