Aktualisierung UI von hintergrund-thread SWIFT
Bin ich mit diesem code für die hintergrund-Arbeit:
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, {
//Some work in the background and updating UI too.
});
Aber ich war zu Lesen,hier, den wir verwenden sollten:
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
//do some task
dispatch_async(dispatch_get_main_queue()) {
//update some UI
}
}
beim aktualisieren der UI.
Meine Frage ist: In dem code-Beispiel bin ich über die Benutzeroberfläche wird aktualisiert, in der globalen Warteschlange und die Benutzeroberfläche wird aktualisiert, ohne Fehler. Was ist der Unterschied zwischen dem Ansatz, den ich verwende, und der Ansatz erwähnt in den link weiter oben?
P. S: der code ausgeführt wird Mac OS X 10.10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Thread-Sicherheit Zusammenfassung in der
"Threading Programming Guide", sagt:
Nur die Versand-Warteschlange, die gebunden ist, um den Haupt-thread
die Haupt-Warteschlange, die Sie mit
dispatch_get_main_queue()
.dispatch_get_global_queue()
gibt einen weltweiten gleichzeitigen Warteschlangedie nicht main queue, und kann deshalb seine Arbeit auszuführen
auf sekundären threads. Daher aktualisieren der Benutzeroberfläche aus dieser Warteschlange
kann Arbeit durch Zufall, aber es kann auch dazu führen, verzögerte Benutzeroberfläche aktualisiert,
nicht funktionierende UI-updates oder stürzt ab.