【问题标题】:CoreData and NSManagedObject Context - private vs. mainCoreData 和 NSManagedObject 上下文 - 私有与主
【发布时间】:2016-07-02 23:27:57
【问题描述】:

使用 performBlock 触发具有私有上下文的 CoreData (CRUD) 操作与使用 dispatch_async 后台队列中的主上下文触发此类操作之间有区别吗?

难道不应该在后台线程中使用主上下文吗?

苹果文档的链接是here

【问题讨论】:

    标签: objective-c swift core-data nsmanagedobjectcontext


    【解决方案1】:

    您应该从不在后台线程中使用主队列上下文。这违反了线程限制规则。

    主队列上下文只能从主队列(UI 队列/线程)或performBlock 访问。如果您需要执行与 UI 无关的任务,那么您应该创建一个私有队列上下文并通过 performBlock 访问它。

    要确认您的核心数据线程正确,您可以打开-com.apple.CoreData.ConcurrencyDebug 1 运行时设置。

    【讨论】:

    • 我明白了。但是,我测试了这两个选项,它们似乎都有效。所以我的问题是,这是否只是运气,禁止的方法有效......
    • 这是一个线程违规,这意味着它会在大部分的时间里工作,然后在生产中失败,数据损坏的风险很高。这就是存在调试设置的原因;因为线程错误不会始终如一地出现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多