2015-05-17 90 views
0

的情況下臨時NSManagedObject是通跨線程

  1. 我希望跨線程傳遞NSManagedObject。
  2. 我想傳遞的NSManagedObject是臨時的,這意味着我不想將它存儲在CoreData中。

目前,我有兩個解決方案:

  1. 創建一個正常的NSManagedObject,做一些事情,將其存儲在CoreData,永久的objectID傳遞到另一個線程,然後在另一個線程刪除。

    [我的關注] CoreData的效率很低。

  2. 創建臨時NSManagedObject爲this,做一些事情,產生NSDictioanry爲this,並通過NSDictioanry到另一個線程,然後創建一個臨時NSManagedObject,並在另一個線程本NSDictionary的初始化。

    [我的擔心]我不知道如何用NSDictionary初始化NSManagedObject。

有沒有什麼建議?

+0

爲什麼你認爲在解決方案1中的效率會很低?你有分析過嗎? –

+0

@MichałCiuba還沒有,但我會在很短的時間內做這個操作一千次,所以我認爲效率會很低。 –

+0

這個管理對象**會被保存嗎? –

回答

-1

我會用第一種解決方案,即保存管理對象。原因是因爲託管對象ID是跨上下文共享對象的推薦方式。

您可以創建1000個託管對象並分批存儲,比如說200.我想你會對這個表現感到滿意。

然後,您可以在一段時間後刪除這些對象,當它不再是時間關鍵時。

我也不會真的反對字典方法。要從字典中創建一個託管對象,最明顯的方法就是給對象類一個自定義初始化器,它將一致字典作爲參數。

如果您按照指示生成字典,那麼這些鍵將與託管對象的屬性名稱具有相同的鍵,所以您只需在該解決方案中做相反的操作即可。

也許沒有一個班輪快捷方式,但這樣的事情:

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

謝謝!你的回答是令人信服的,但我想保持我的問題開放,並等待其他不同的建議,因爲我沒有在這裏尋找答案,而是建議。 –

+0

請不要做這個選項。它不是線程安全的。 – Derek

+0

@Derek這與線程無關。 – Mundi