【发布时间】:2012-08-19 17:41:42
【问题描述】:
我正在使用NSPrivateQueueConcurrencyType 并发类型创建我的托管对象上下文。
我还使用performBlock: 选择器在后台执行操作。因此,如果我在后台(在 performBlock 中)获取一些对象,那么在主线程中使用生成的托管对象是否安全?
【问题讨论】:
标签: objective-c ios cocoa-touch core-data
我正在使用NSPrivateQueueConcurrencyType 并发类型创建我的托管对象上下文。
我还使用performBlock: 选择器在后台执行操作。因此,如果我在后台(在 performBlock 中)获取一些对象,那么在主线程中使用生成的托管对象是否安全?
【问题讨论】:
标签: objective-c ios cocoa-touch core-data
我不是 100% 确定,但根据我自己的经验,我会这样做:如果您要更改变量属性,请在 performBlock 内进行。我有一个案例,阅读导致一些奇怪的行为,但总的来说它似乎没问题。如果您想更加安全,请在每次以任何方式接触托管对象时使用performBlock。
【讨论】:
您需要为每个线程使用不同的上下文,如此处所述iOS Developer - Core data multithreading
【讨论】:
对不起,我应该更好地搜索,这正是我的问题和答案: Core Data's NSPrivateQueueConcurrencyType and sharing objects between threads
【讨论】:
作为一般规则,无论您使用什么并发类型,跨线程共享NSManagedObject 实例都是不安全的。
但是,您可以使用library 使您的上下文和对象实例成为线程安全的。有了它,您几乎可以忽略所有关于确保上下文之间线程隔离的废话,并将精力集中在重要的事情上,例如构建应用程序的实际功能。
【讨论】: