Jak to powoduje zakleszczenie (raz na jakiś czas) i jak to rozwikłać

@synchronized (self.class)     {
    fetchedObjects = [moc executeFetchRequest:request error:&error];
}

moc to managedObjectContext

Może to być moc odpowiadające głównemu wątkowi. To moc jest rodzicem wszystkich MOC.

Drugi moc to tylko dzieci. Czasami, gdy dziecko wykonuje executeFetchRequest, spowoduje to, że nadrzędne moc wykona to samo executeFetchRequest.

Często widzę to

poza głównym wątkiem:

@synchronized (self.class)     {
    fetchedObjects = [moc executeFetchRequest:request error:&error]; //semaphore_wait_trap here
}

Na głównym wątku

@synchronized (self.class)     {//_psynch_mutexwait
    fetchedObjects = [moc executeFetchRequest:request error:&error];
}

Dobra ... Dlaczego impas? Mimo że moc na głównym wątku odpowiada głównemu wątkowi, nie jest w ogóle dostępny. Czeka na @synchronized. Więc dlaczegofetchedObjects = [moc executeFetchRequest:request error:&error]; czekać?

questionAnswers(2)

yourAnswerToTheQuestion