por que a fila NSManagedObjectContext é executada no thread principal?
Quando mando umperformBlock
mensagem para o meu MOC do tipoNSPrivateQueueConcurrencyType
, como isso:
[self.privateManagedObjectContext performBlockAndWait:^{
if ([[NSThread currentThread] isMainThread]) {
NSLog(@"executing on the main thread!!");
}
…
}];
Acho que, por padrão, isso é executado no thread principal. O condicional no código acima é acionado e o Navegador de Problemas indica que a execução está ocorrendo emThread 1
noNSManagedObject Queue
.
Isso é muito intrigante para mim, porque a Apple nos diz que "cada segmento deve ter seu próprio contexto de objeto gerenciado inteiramente privado". Dado que um MOC do tipoNSMainQueueConcurrencyType
usará o encadeamento principal, não viola o confinamento de encadeamento para um MOC do tipoNSPrivateQueueConcurrencyType
usar o thread principal?
A execução do meu código no thread principal é normal? Entendi mal o confinamento de threads? Entendo que uma fila não está necessariamente vinculada a um encadeamento específico, mas, neste caso, parece que a fila MOC privada deve, no mínimo, evitar o encadeamento principal, se não tiver um único encadeamento obrigatório. Estou tendo alguns erros estranhos, então preciso descobrir o que está acontecendo. Obrigado!