通过performBlock在主线程中使用在后台加载的托管对象是否安全?

时间:2012-08-24 07:06:10

标签: objective-c ios cocoa-touch core-data

我正在使用NSPrivateQueueConcurrencyType并发类型创建托管对象上下文。

此外,我正在使用performBlock:选择器在后台执行操作。所以如果我在后台获取一些对象(在performBlock :)中,在主线程中使用生成的托管对象是否安全?

4 个答案:

答案 0 :(得分:0)

我不是百分百肯定,但根据我自己的经验,我这样做:如果你更改变量属性,请在performBlock内进行。我有一个案例,阅读引起了一些奇怪的行为,但总的来说似乎没问题。如果您想要更加安全,请在每次以任何方式触摸托管对象时使用performBlock

答案 1 :(得分:0)

您需要为每个线程使用不同的上下文,如iOS Developer - Core data multithreading

中所述

实施的一种方式在Core Data - one context per thread implementation

中描述

答案 2 :(得分:0)

抱歉,我应该更好地搜索,这是我的问题&回答: Core Data's NSPrivateQueueConcurrencyType and sharing objects between threads

答案 3 :(得分:0)

作为一般规则,无论您使用何种并发类型,都不能跨线程共享NSManagedObject实例。

但是,您可以使用library来使您的上下文和对象实例具有线程安全性。有了这个,您几乎可以忽略关于确保上下文之间的线程隔离的所有废话,并将注意力集中在重要事项上,例如构建应用程序的实际功能。