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