跨线程传递临时NSManagedObject

时间:2015-05-17 15:50:23

标签: ios objective-c multithreading core-data nsmanagedobject

情景是

  1. 我想跨线程传递NSManagedObject。
  2. 我想传递的NSManagedObject是临时的,这意味着我不想将它存储在CoreData中。
  3. 目前,我有两个解决方案:

    1. 创建一个普通的NSManagedObject,做一些事情,将它存储在CoreData中,并将永久objectID传递给另一个线程,然后在另一个线程中删除它。

      [我的担忧] CoreData的效率很低。

    2. 创建一个临时NSManagedObject为this,做一些事情,生成一个NSDictioanry为this,并将NSDictioanry传递给另一个线程,然后在另一个线程中创建一个临时NSManagedObject和init与这个NSDictionary线程。

      [我的顾虑]我不知道如何使用NSDictionary初始化NSManagedObject。

    3. 有什么建议吗?

1 个答案:

答案 0 :(得分:-1)

我会选择第一个解决方案,即保存托管对象。原因是托管对象ID是跨上下文共享对象的推荐方法。

您可以创建1000个托管对象并分批保存,例如200个。我认为您对性能非常满意。

然后,当对象不再具有时间关键时,您可以在一段时间后删除这些对象。

我也不会真的反对字典方法。要从字典创建托管对象,最明显的方法是为对象类提供一个自定义初始化程序,该初始化程序将一致字典作为参数。

如果您按照指示生成了字典,则键将与托管对象的属性名称相同,因此您只需执行与该解决方案相反的操作。

也许没有单行快捷方式,但是这样的话:

for (NSString *key in dictionary.allKeys) {
    [managedObject setValue:dictionary[key] forKey:key];
}