同一 NSManagedObjectContext 对象上的多个并发 perform() 调用
Posted
技术标签:
【中文标题】同一 NSManagedObjectContext 对象上的多个并发 perform() 调用【英文标题】:Multiple concurrent perform() calls on same NSManagedObjectContext object 【发布时间】:2020-01-22 04:12:14 【问题描述】:当多个perform()
调用在同一个NSManagedObjectContext
对象上被调用时,它们会按照它们被调用的顺序一个一个地执行吗?我认为这是真的,因为the document 说
Core Data 使用线程(或序列化队列)限制来保护 托管对象和托管对象上下文(参见核心数据编程 指南)。
这表明托管对象上下文及其线程具有 1:1 映射,并且所有 perform()
调用都是串行的。但令我害怕的是,我找不到任何明确的讨论,甚至在 Apple 的文档中也找不到。
在我的应用程序中,我使用 NSPersistentContainer
设置了一个 CoreData 堆栈,并创建了一个专用的后台上下文来修改托管对象。当调用perform()
调用时,可能会发生之前的perform()
调用尚未完成。因此,在这种情况下,它们被一一执行是至关重要的。这就是为什么我想在上面确认我的理解。
注意:我知道perform()
是异步的,但这是从调用者的角度来看的。我问的是从被调用者的角度。
【问题讨论】:
【参考方案1】:是的,多个 perform 调用将排队并以相同的顺序执行。
【讨论】:
以上是关于同一 NSManagedObjectContext 对象上的多个并发 perform() 调用的主要内容,如果未能解决你的问题,请参考以下文章
父/子 NSManagedObjectContext 不起作用
NSManagedObjectContext:自动更新与否?