如果在上下文的线程上运行,[NSManagedObjectContext performBlock]是否同步?

时间:2013-01-27 11:13:27

标签: ios objective-c nsmanagedobject nsmanagedobjectcontext

假设我有一个托管对象上下文绑定到主线程,我在主线程上调用[mainContext performBlock:block]。它会同步运行还是仍然安排并在以后运行?

1 个答案:

答案 0 :(得分:3)

假设您的意思是NSMainQueueConcurrencyType(而不是NSConfinementConcurrencyType),则调用performBlock:的行为与dispatch_async相似,即您的阻止将排队而不是立即执行。

您可以轻松验证:

NSLog(@"before block");
[self.managedObjectContext performBlock:^{
    NSLog(@"in block");
}];
NSLog(@"after block");

这将打印(按此顺序):

before block
after block
in block

如果需要同步执行块,则必须对基于队列的并发类型使用performBlockAndWait: