У меня есть NSManagedObjectContext, объявленный так:
- (NSManagedObjectContext *) backgroundMOC {
if (backgroundMOC != nil) {
return backgroundMOC;
}
backgroundMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
return backgroundMOC;
}
Обратите внимание, что он объявлен с типом частной очереди concurrency, поэтому его задачи должны выполняться в фоновом потоке. У меня есть следующий код:
-(void)testThreading
{
/* ok */
[self.backgroundMOC performBlock:^{
assert(![NSThread isMainThread]);
}];
/* CRASH */
[self.backgroundMOC performBlockAndWait:^{
assert(![NSThread isMainThread]);
}];
}
Почему вызов performBlockAndWait
выполняет задачу в основном потоке, а не в фоновом потоке?