Ich habe einen Code geerbt, der diese ziemlich ungewöhnliche verschachtelte Sequenz hat. Das übliche Paradigma würde einen einzelnen Versand an die Hauptwarteschlange haben, um die UI zu aktualisieren. Der Code, der unten gezeigt wird, verschachtelt einen Versand an die Hauptwarteschlange innerhalb eines anderen Versands an die Hauptwarteschlange.Was ist der Zweck der Verschachtelung von dispatch_async (dispatch_get_main_queue()^{})?
- (void)viewDidLoad
{
// Setup some data
// Adjust UI
dispatch_async(myBackgroundQueue, ^{
while(Do_some_time_consuming_work) {
// Time consuming work goes here
if (things_are_going_slowly) {
dispatch_async(dispatch_get_main_queue(), ^{ // <- one of these two seems redundant
dispatch_async(dispatch_get_main_queue(), ^{ // <- one of these two seems redundant
stillWorkingLabel.hidden = NO; //Let user know the work is still ongoing
});
});
)
// Finish time-consuming work
}
});
}
Was ist der Zweck, wenn überhaupt, dispatch_async(dispatch_get_main_queue()
die Verschachtelung? Diese verschachtelte Sequenz wird an mehreren Stellen in der App angezeigt. Es scheint mir, dass nur ein Versand in die Hauptwarteschlange benötigt wird.
Ich glaube, ich habe alle relevanten Fragen zu verwandten Themen hier und über Google-Suche gelesen, aber ich habe niemanden gefunden, der vorschlägt, zwei identische Versendungen zu verschachteln.
Die App funktioniert gut, mit der Benutzeroberfläche wie im obigen Beispiel und an anderen Stellen im Code erwartet aktualisiert.
Die meisten Code der App verwendet die übliche nicht verschachtelte Version des obigen Schemas, und natürlich funktioniert es auch gut.
Ich bin geneigt, nur diese verschachtelten Anrufe mit einem einzigen Versand zu ersetzen, aber vielleicht fehlt mir hier etwas. Jeder Rat würde geschätzt werden.