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.
Gibt es eine Möglichkeit, einen Block mit einem primitiven Parameter nach einer Verzögerung aufzurufen, z. B. performSelector:withObject:afterDelay:mit einem Argument wie int/ double/ float?
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?#>)
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 …
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?
In Swift 2 konnte ich eine Warteschlange mit folgendem Code erstellen: let concurrentQueue = dispatch_queue_create("com.swift3.imageQueue", DISPATCH_QUEUE_CONCURRENT) Dies wird jedoch in Swift 3 nicht kompiliert. Was ist die bevorzugte Methode, um dies in Swift 3 zu schreiben?
Wenn Sie auf iOS 4.0 oder höher abzielen können Ist es mit GCD der beste Weg, Singleton in Objective-C (thread-sicher) zu erstellen? + (instancetype)sharedInstance { static dispatch_once_t once; static id sharedInstance; dispatch_once(&once, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance; }
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? …
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 } …
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 …
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), ^ …
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 …
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, …
Ich habe mit Erfolg Grand Central Dispatch in meinen Apps verwendet, aber ich habe mich gefragt, was der wahre Vorteil der Verwendung von so etwas ist: dispatch_async(dispatch_get_main_queue(), ^{ ... do stuff oder auch dispatch_sync(dispatch_get_main_queue(), ^{ ... do stuff Ich meine, in beiden Fällen feuern Sie einen Block ab, der im …
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, ^{ …
Ich habe Probleme, die gleichzeitigen und seriellen Warteschlangen in GCD vollständig zu verstehen. Ich habe einige Probleme und hoffe, dass mir jemand klar und genau antworten kann. Ich lese, dass serielle Warteschlangen erstellt und verwendet werden, um Aufgaben nacheinander auszuführen. Was passiert jedoch, wenn: Ich erstelle eine serielle Warteschlange Ich …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.