【问题标题】:Is it safe to use managed objects loaded in background by performBlock: in main thread?在主线程中使用 performBlock: 在后台加载的托管对象是否安全?
【发布时间】:2012-08-19 17:41:42
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      Core Data - one context per thread implementation描述了一种实现方式

      【讨论】:

        【解决方案3】:

        对不起,我应该更好地搜索,这正是我的问题和答案: Core Data's NSPrivateQueueConcurrencyType and sharing objects between threads

        【讨论】:

          【解决方案4】:

          作为一般规则,无论您使用什么并发类型,跨线程共享NSManagedObject 实例都是不安全的。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-10-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多