2

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

4

1 回答 1

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:这两种基于队列的并发类型。

于 2013-01-27T11:22:28.103 回答