【问题标题】:NSPrivateQueueConcurrencyType without Perform Block没有执行块的 NSPrivateQueueConcurrencyType
【发布时间】:2016-04-07 10:53:59
【问题描述】:

我创建了一个带有 ConcurrencyType NSPrivateQueueConcurrencyType 的 NSManagedObjectContext。我读到我们应该只对每个带有上下文的任务使用 perform Block API。

我的问题是如果不使用执行块 API 并直接执行带有上下文的任务会发生什么?

【问题讨论】:

    标签: ios xcode core-data nsmanagedobjectcontext


    【解决方案1】:

    简短:不要。

    更长:它取决于NSManagedObjectContext 的 PrivateConcurrencyType 版本的内部实现。我想,如果您只在一个线程中使用它并且不会将该上下文中的对象传递给任何其他线程,那么它可能会起作用。或不。但是

    1. 不保证;
    2. 如果您只打算在一个线程中使用它,则需要 约束并发类型。实际上,我可能根本不会使用约束,以防我以后需要一些并发性,但我们在这里是理论上的,对吧?
    3. 即使现在可以正常工作,但将来可能会崩溃。

    如果您想在不同的线程中使用此上下文,肯定会出现问题。一些数据可能会随机消失或重新出现(曾经发生在我身上),某些东西可能会崩溃,独角兽可能会席卷您的办公室。所以不要

    【讨论】:

    • 限制已被弃用。至于其余的,OP应该遵循这个建议。不要使用没有 performBlock 的私有上下文。它最终会损坏数据。
    • @MarcusS.Zarra,谢谢,我知道不建议这样做,但我忘记了它已被弃用。我不使用它反正:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多