gpt4 book ai didi

ios - 关于多线程核心数据的说明

转载 作者:行者123 更新时间:2023-11-29 10:56:55 25 4
gpt4 key购买 nike

我大体上理解Core Data不是线程安全的,但我对具体情况有疑问。假设我在主线程的上下文中创建了一个对象,但随后我想进行一些繁重的计算。所以我将对象发送到另一个线程。这听起来已经很糟糕了,我需要以某种方式复制那个对象吗?如果我将对象保存在另一个线程的上下文中,那么它似乎无法从该上下文中获取有效对象(我必须先保存到商店吗?这似乎是对硬盘的滥用)。我现在正在使用 Magical Record,流程是这样的:

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(可能是因为对象还没有被保存?)。我当前的方法在线程之间共享一个上下文(仅用于保存操作)所以这让我有点不舒服。是否有其他首选方法?我应该简单地分派(dispatch)回主线程来设置属性并保存吗?

最佳答案

请去阅读文档。您不能在线程之间共享上下文或托管对象。

您可以将对象 ID 传递给另一个线程,并从该线程的上下文中检索关联的对象。

  1. 在第一个线程中保存上下文。
  2. 使用 contextDidSave 通知将更改合并到第二个线程的上下文中。
  3. 然后您将能够在第二个线程中检索最新的对象。

关于ios - 关于多线程核心数据的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17871365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com