NSManagedObjectContext performBlockAndWait: não executa no thread de segundo plano?

Eu tenho um NSManagedObjectContext declarado assim:

- (NSManagedObjectContext *) backgroundMOC {
    if (backgroundMOC != nil) {
        return backgroundMOC;
    }
    backgroundMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    return backgroundMOC;
}

Observe que ele é declarado com um tipo de simultaneidade de fila privada, portanto, suas tarefas devem ser executadas em um thread de segundo plano. Eu tenho o seguinte código:

-(void)testThreading
{
    /* ok */
    [self.backgroundMOC performBlock:^{
        assert(![NSThread isMainThread]); 
    }];

    /* CRASH */
    [self.backgroundMOC performBlockAndWait:^{
        assert(![NSThread isMainThread]); 
    }];
}

Por que chamarperformBlockAndWait executar a tarefa no thread principal, em vez de thread de fundo?

questionAnswers(4)

yourAnswerToTheQuestion