Core data NSManagedObjectContext save()方法的默认行为是否为阻塞方法?

Core data NSManagedObjectContext save()方法的默认行为是否为阻塞方法?,core-data,swift2,nsmanagedobjectcontext,Core Data,Swift2,Nsmanagedobjectcontext,非常具体地说:如果我从应用程序委托获取托管对象上下文,并且没有对其设置任何参数,那么在运行INSERT、updates和save()之后会发生什么情况 应用程序是否会阻止save(),直到完成?是的,save方法会阻止。它甚至不是默认值——它总是这样。不管上下文是来自应用程序委托还是其他地方,save是一种同步方法。这就是它的本质: 通常,当我创建一个对象时,我只在创建时设置主键(在对象的生命周期中不会更改的属性)。然后我使用更新方法来完成创建。在这个特殊的例子中,我将服务器上的一个属性从“cr

非常具体地说:如果我从应用程序委托获取托管对象上下文,并且没有对其设置任何参数,那么在运行INSERT、updates和save()之后会发生什么情况


应用程序是否会阻止save(),直到完成?

是的,
save
方法会阻止。它甚至不是默认值——它总是这样。不管上下文是来自应用程序委托还是其他地方,
save
是一种同步方法。

这就是它的本质:
通常,当我创建一个对象时,我只在创建时设置主键(在对象的生命周期中不会更改的属性)。然后我使用更新方法来完成创建。在这个特殊的例子中,我将服务器上的一个属性从“creational”属性更改为“updateable”属性,但在应用程序中没有找到它。因此,应用程序删除对象只是为了让服务器稍后再创建它们…

那么,如果我通过后台线程执行保存操作(即稍后完成)并在主线程中执行保存操作以立即完成,情况会如何?我有一个场景,看起来CoreData事务在table.reload()启动之前没有完成,并且事务在主线程中…如果在两个线程上保存,则无法保证哪一个先完成--除非使用
performBlock
或GCD来确保它,或者其他一些操作排队系统。听起来你需要问一个不同的问题,更详细地了解你的具体问题。当然,如果save是一个阻塞方法,那么我是否在后台有一个事务,在主线程上有一个事务,只要主线程上的事务在table.reload()之前应等待主线程上的事务完成。否?保存是一种阻塞、同步的方法,但多线程可能会导致任何API出现复杂问题。如果没有关于你的特定应用程序和你面临的问题的更多信息,就不可能回答更多的细节。我现在运行的测试已经交换了调用(将后台线程移动到table.reload()之后)。我希望这能解决问题!