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