此代码managedobjectcontext是否保证是线程安全的?

时间:2013-12-06 06:51:26

标签: objective-c core-data nsmanagedobject nsmanagedobjectcontext

在我的系统中,每个线程都有自己的托管对象上下文。

有时我想要一个特定对象的等效对象。

所以我做了这个类别

-(NSManagedObject *) moVersionForThisThread
{
    NSManagedObjectID * moID = [self objectID];
    NSManagedObject * mo= [[BGMDCRManagedObjectContextThreadHandler managedObjectContext]existingObjectWithID:moID error:nil];
    return mo;
}

据我所知,[self objectID]是为所有线程保存的,existsObjectWithID也是threadSafe。对?我们总能找到合适的物品吗?

什么都不会出错?

右?

确保。

1 个答案:

答案 0 :(得分:2)

我相信你已经错过了关于objectIDs线程安全的方法。在单独的线程上使用objectID是完全可以接受的,但是您需要在实例化该对象的线程上从托管对象中检索该objectID。换句话说,如果你在对象的原始线程以外的线程上调用moVersionForThisThread,你可能会遇到代码[self objectID]的线程问题。

我建议将此库插入您的项目以进行调试,如果您在错误的线程上访问托管对象,则会给您警告: https://github.com/GrahamDennis/GDCoreDataConcurrencyDebugging