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

时间:2016-09-28 16:08:45

标签: ios core-data restkit

我注意到,在保存NSManagedObjectContexts时,RestKit会使用save对每个NSManagedObjectContext进行performBlockAndWait个调用。

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

我对管理父母和子女NSManagedObjectContexts的理解是,只有NSManagedObjectContext类型MainQueueConcurrencyType应该以这种方式保存(这通常是另一个{{1}的子上下文类型为NSManagedObjectContext的{​​{1}}实际上与PrivateQueueConcurrencyType相关联的。我认为这个想法是保存到持久性存储(即磁盘)是一个更长的操作,不会,也不应该等待。我哪里错了?

1 个答案:

答案 0 :(得分:0)

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