@synchronized (self.class) {
fetchedObjects = [moc executeFetchRequest:request error:&error];
}
moc は managedObjectContext です
メインスレッドに対応するのは moc です。その moc はすべての MOC の親です。
他のモックはただの子供です。子が executeFetchRequest を実行すると、親 moc も同じ executeFetchRequest を実行することがあります。
私がよく目にするのは、
メインスレッドの外側:
@synchronized (self.class) {
fetchedObjects = [moc executeFetchRequest:request error:&error]; //semaphore_wait_trap here
}
メインスレッドで
@synchronized (self.class) {//_psynch_mutexwait
fetchedObjects = [moc executeFetchRequest:request error:&error];
}
わかりました...なぜデッドロックですか?メインスレッドのモックはメインスレッドに対応していますが、まったくアクセスされていません。@synchronized で待ちます。では、なぜfetchedObjects = [moc executeFetchRequest:request error:&error];
待つのですか?