Pytania otagowane jako grand-central-dispatch

Grand Central Dispatch (GCD) zapewnia prosty i niezawodny mechanizm współbieżnych i asynchronicznych operacji, głównie w systemach operacyjnych Apple (np. IOS, macOS, watchOS i tvOS), ale także we FreeBSD i MidnightBSD.


24
dispatch_after - GCD w Swift?
Przeglądałem iBook od Apple i nie mogę znaleźć żadnej jego definicji: Czy ktoś może wyjaśnić strukturę dispatch_after? dispatch_after(<#when: dispatch_time_t#>, <#queue: dispatch_queue_t?#>, <#block: dispatch_block_t?#>)


13
Jak napisać dispatch_after po GCD w Swift 3, 4 i 5?
W Swift 2 mogłem użyć dispatch_afterdo opóźnienia akcji za pomocą wielkiej centralnej wysyłki: 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 }) Ale wydaje się, że nie kompiluje się już od Swift 3. Jaki jest preferowany sposób pisania tego we współczesnym Swift?



4
GCD do wykonania zadania w głównym wątku
Mam wywołanie zwrotne, które może pochodzić z dowolnego wątku. Kiedy otrzymuję to wywołanie zwrotne, chciałbym wykonać pewne zadanie w głównym wątku. Czy muszę sprawdzać, czy jestem już w głównym wątku - czy istnieje kara za nieprzeprowadzenie tej kontroli przed wywołaniem poniższego kodu? dispatch_async(dispatch_get_main_queue(), ^{ // do work here });

6
Jak mam dispatch_sync, dispatch_async, dispatch_after itp. W Swift 3, Swift 4 i późniejszych wersjach?
Mam dużo kodu w projektach Swift 2.x (lub nawet 1.x), które wyglądają tak: // 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
W Swift jak wywołać metodę z parametrami w głównym wątku GCD?
W mojej aplikacji mam funkcję, która tworzy NSRURLSession i wysyła NSURLRequest za pomocą sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error) W bloku ukończenia tego zadania muszę wykonać obliczenia, które dodają obraz UIImagającego do wywołującego kontrolera widoku. Mam func o nazwie func displayQRCode(receiveAddr, withAmountInBTC:amountBTC) wykonuje obliczenia dodające UIImage. Jeśli spróbuję uruchomić kod dodający …

10
Oczekiwanie na wykonanie dwóch bloków asynchronicznych przed rozpoczęciem kolejnego bloku
Korzystając z GCD, chcemy przejść do wykonania i wykonania dwóch bloków asynchronicznych, zanim przejdziemy do kolejnych kroków wykonania. Jak najlepiej to zrobić? Wypróbowaliśmy następujące, ale wydaje się, że to nie działa: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { // block1 }); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { // block2 }); // wait until both the …

13
Jak czekać na zakończenie asynchronicznie wysłanego bloku?
Testuję kod, który wykonuje przetwarzanie asynchroniczne przy użyciu Grand Central Dispatch. Kod testowy wygląda następująco: [object runSomeLongOperationAndDo:^{ STAssert… }]; Testy muszą czekać na zakończenie operacji. Moje obecne rozwiązanie wygląda następująco: __block BOOL finished = NO; [object runSomeLongOperationAndDo:^{ STAssert… finished = YES; }]; while (!finished); Co wygląda nieco prymitywnie, znasz lepszy …

8
Poczekaj, aż funkcja Swift for loop z asynchronicznymi żądaniami sieciowymi zakończy wykonywanie
Chciałbym, aby pętla for in wysyłała kilka żądań sieciowych do firebase, a następnie przekazywała dane do nowego kontrolera widoku po zakończeniu wykonywania metody. Oto mój kod: var datesArray = [String: AnyObject]() for key in locationsArray { let ref = Firebase(url: "http://myfirebase.com/" + "\(key.0)") ref.observeSingleEventOfType(.Value, withBlock: { snapshot in datesArray["\(key.0)"] = …

6
iPhone - główny wątek Grand Central Dispatch
Z powodzeniem korzystałem z funkcji Grand Central Dispatch w moich aplikacjach, ale zastanawiałem się, jaka jest prawdziwa zaleta korzystania z czegoś takiego: dispatch_async(dispatch_get_main_queue(), ^{ ... do stuff lub nawet dispatch_sync(dispatch_get_main_queue(), ^{ ... do stuff Chodzi mi o to, że w obu przypadkach odpalasz blok do wykonania w głównym wątku, dokładnie …

3
Różnica między dispatch_async i dispatch_sync w kolejce szeregowej?
Utworzyłem kolejkę szeregową w ten sposób: dispatch_queue_t _serialQueue = dispatch_queue_create("com.example.name", DISPATCH_QUEUE_SERIAL); Jaka jest różnica między dispatch_asyncnazywane tak dispatch_async(_serialQueue, ^{ /* TASK 1 */ }); dispatch_async(_serialQueue, ^{ /* TASK 2 */ }); I dispatch_syncdzwoniłeś w ten sposób w tej kolejce szeregowej? dispatch_sync(_serialQueue, ^{ /* TASK 1 */ }); dispatch_sync(_serialQueue, ^{ /* …

6
Kolejki równoległe i szeregowe w GCD
Staram się w pełni zrozumieć kolejki równoległe i szeregowe w GCD. Mam pewne problemy i mam nadzieję, że ktoś może mi odpowiedzieć jasno i na temat. Czytam, że kolejki szeregowe są tworzone i używane do wykonywania zadań jedna po drugiej. Jednak co się stanie, jeśli: Tworzę kolejkę szeregową Używam dispatch_async(w …

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.