Als «grand-central-dispatch» getaggte Fragen

Grand Central Dispatch (GCD) bietet einen einfachen und robusten Mechanismus für gleichzeitige und asynchrone Vorgänge, hauptsächlich unter Apple-Betriebssystemen (z. B. iOS, macOS, watchOS und tvOS), aber auch unter FreeBSD und MidnightBSD.


24
dispatch_after - GCD in Swift?
Ich habe das iBook von Apple durchgesehen und konnte keine Definition dafür finden: Kann jemand die Struktur von erklären dispatch_after? dispatch_after(<#when: dispatch_time_t#>, <#queue: dispatch_queue_t?#>, <#block: dispatch_block_t?#>)

8
NSOperation gegen Grand Central Dispatch
Ich lerne etwas über gleichzeitiges Programmieren für iOS. Bisher habe ich über NSOperation/NSOperationQueue und gelesen GCD. Was sind die Gründe für die Verwendung von NSOperationQueueover GCDund umgekehrt? Klingt nach beidem GCDund NSOperationQueueabstrahiert die explizite Erstellung NSThreadsvom Benutzer. Die Beziehung zwischen den beiden Ansätzen ist mir jedoch nicht klar, so dass …

13
Wie schreibe ich dispatch_after GCD in Swift 3, 4 und 5?
In Swift 2 konnte ich dispatch_aftereine Aktion mit Grand Central Dispatch verzögern: var dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC))) dispatch_after(dispatchTime, dispatch_get_main_queue(), { // your function here }) Dies scheint jedoch seit Swift 3 nicht mehr zu kompilieren. Was ist die bevorzugte Methode, um dies im modernen Swift zu schreiben?



4
GCD zur Ausführung der Aufgabe im Hauptthread
Ich habe einen Rückruf, der von jedem Thread kommen könnte. Wenn ich diesen Rückruf erhalte, möchte ich eine bestimmte Aufgabe im Hauptthread ausführen. Muss ich überprüfen, ob ich bereits im Haupt-Thread bin - oder gibt es eine Strafe, wenn ich diese Überprüfung nicht durchführe, bevor ich den folgenden Code aufrufe? …

6
Wie kann ich dispatch_sync, dispatch_async, dispatch_after usw. in Swift 3, Swift 4 und darüber hinaus ausführen?
Ich habe viel Code in Swift 2.x (oder sogar 1.x) Projekten, der so aussieht: // Move to a background thread to do some long running work dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { let image = self.loadOrGenerateAnImage() // Bounce back to the main thread to update the UI dispatch_async(dispatch_get_main_queue()) { self.imageView.image = image } …

9
Wie rufe ich in Swift eine Methode mit Parametern im GCD-Hauptthread auf?
In meiner App habe ich eine Funktion, die eine NSRURLSession erstellt und eine NSURLRequest mit sendet sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error) Im Abschlussblock für diese Aufgabe muss eine Berechnung durchgeführt werden, die dem aufrufenden Ansichtscontroller ein UIImage hinzufügt. Ich habe eine Funktion namens func displayQRCode(receiveAddr, withAmountInBTC:amountBTC) das macht die UIImage-Addition …

10
Warten Sie, bis zwei asynchrone Blöcke ausgeführt wurden, bevor Sie einen weiteren Block starten
Bei Verwendung von GCD möchten wir warten, bis zwei asynchrone Blöcke ausgeführt und ausgeführt wurden, bevor wir mit den nächsten Ausführungsschritten fortfahren. Was ist der beste Weg das zu tun? Wir haben Folgendes versucht, aber es scheint nicht zu funktionieren: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { // block1 }); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ …

13
Wie warte ich, bis ein asynchron versendeter Block fertig ist?
Ich teste Code, der asynchrone Verarbeitung mit Grand Central Dispatch ausführt. Der Testcode sieht folgendermaßen aus: [object runSomeLongOperationAndDo:^{ STAssert… }]; Die Tests müssen warten, bis der Vorgang abgeschlossen ist. Meine aktuelle Lösung sieht folgendermaßen aus: __block BOOL finished = NO; [object runSomeLongOperationAndDo:^{ STAssert… finished = YES; }]; while (!finished); Was …

8
Warten Sie, bis die Ausführung der schnellen for-Schleife mit asynchronen Netzwerkanforderungen abgeschlossen ist
Ich möchte, dass eine for-in-Schleife eine Reihe von Netzwerkanforderungen an firebase sendet und die Daten dann an einen neuen View-Controller weiterleitet, sobald die Ausführung der Methode abgeschlossen ist. Hier ist mein Code: var datesArray = [String: AnyObject]() for key in locationsArray { let ref = Firebase(url: "http://myfirebase.com/" + "\(key.0)") ref.observeSingleEventOfType(.Value, …


3
Unterschied zwischen dispatch_async und dispatch_sync in der seriellen Warteschlange?
Ich habe eine serielle Warteschlange wie folgt erstellt: dispatch_queue_t _serialQueue = dispatch_queue_create("com.example.name", DISPATCH_QUEUE_SERIAL); Was ist der Unterschied zwischen so dispatch_asyncgenannt dispatch_async(_serialQueue, ^{ /* TASK 1 */ }); dispatch_async(_serialQueue, ^{ /* TASK 2 */ }); Und dispatch_syncso in dieser seriellen Warteschlange angerufen? dispatch_sync(_serialQueue, ^{ /* TASK 1 */ }); dispatch_sync(_serialQueue, ^{ …


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.