为什么RestKit通过performBlockAndWait保存所有NSManagedObjectContexts?

问题描述:

我注意到,当保存NSManagedObjectContexts时,RestKit将save呼叫打包在每个NSManagedObjectContext上,呼叫为performBlockAndWait为什么RestKit通过performBlockAndWait保存所有NSManagedObjectContexts?

https://github.com/RestKit/RestKit/blob/development/Code/CoreData/NSManagedObjectContext%2BRKAdditions.m#L64

这是我管理的家长和孩子NSManagedObjectContexts的认识到,只有与MainQueueConcurrencyType类型NSManagedObjectContext应保存这种方式(这通常是PrivateQueueConcurrencyType型这是另一个NSManagedObjectContext孩子方面究竟是与persistentStoreCoordinator相关)。我认为这个想法是,保存到持久存储区(即磁盘)是一个较长的操作,不会,也不应该等待。我哪里错了?

您对ManagedObjectContext所做的一切都必须在该上下文的调度队列中完成。确保发生的最简单方法是在由performBlock或performBlockAndWait调用的块中执行此操作。如果方法的后面有代码取决于块的结果,performBlockAndWait是要走的路。如果您必须将这些块添加到较旧的Core Data代码(如RestKit的情况下),那么将NSManagedObjectContext调用包装在performBlockAndWait中是让您的Core Data代码更安全的一种非常痛苦的方式。