【发布时间】:2016-07-02 23:27:57
【问题描述】:
使用 performBlock 触发具有私有上下文的 CoreData (CRUD) 操作与使用 dispatch_async 后台队列中的主上下文触发此类操作之间有区别吗?
难道不应该在后台线程中使用主上下文吗?
苹果文档的链接是here。
【问题讨论】:
标签: objective-c swift core-data nsmanagedobjectcontext
使用 performBlock 触发具有私有上下文的 CoreData (CRUD) 操作与使用 dispatch_async 后台队列中的主上下文触发此类操作之间有区别吗?
难道不应该在后台线程中使用主上下文吗?
苹果文档的链接是here。
【问题讨论】:
标签: objective-c swift core-data nsmanagedobjectcontext
您应该从不在后台线程中使用主队列上下文。这违反了线程限制规则。
主队列上下文只能从主队列(UI 队列/线程)或performBlock 访问。如果您需要执行与 UI 无关的任务,那么您应该创建一个私有队列上下文并通过 performBlock 访问它。
要确认您的核心数据线程正确,您可以打开-com.apple.CoreData.ConcurrencyDebug 1 运行时设置。
【讨论】: