Ich denke, der beste Weg, diese Frage zu stellen mit einigem Code ist:Welches Verhalten ist bei Grand Central Dispatch in Objective-C garantiert?
//Main method
for(int i = 0; i < 10; i++)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self foo:i];
});
}
- (void) foo: (int) i
{
@synchronized(self)
{
NSLog(@"%d",i);
}
}
In diesem Fall gewährleistet ist, dass die Zahlen 0-9 werden in der Reihenfolge ausgedruckt werden? Gibt es jemals eine Chance, dass einer der Threads, die in der Ausführungswarteschlange warten, übersprungen wird? Wie wäre es in Wirklichkeit? Realistisch, passiert das jemals? Was, wenn ich das obige Verhalten wollte (immer noch Threads verwendend); Wie könnte ich das erreichen?
Threads und GCD-Blöcke werden nicht "übersprungen". Wenn ein Thread eine Ausnahme auslöst, werden Sie nie ohne einen expliziten try-catch wissen, da GCD auf die Ausnahmebehandlung verzichtet. – CodaFi