Grand Central Dispatch (GCD) fornisce un meccanismo semplice e robusto per operazioni simultanee e asincrone, principalmente nei sistemi operativi Apple (ad esempio, iOS, macOS, watchOS e tvOS), ma anche FreeBSD e MidnightBSD.
C'è un modo per chiamare un blocco con un parametro primitivo dopo un ritardo, come usare performSelector:withObject:afterDelay:ma con un argomento come int/ double/ float?
Ho esaminato l' iBook di Apple e non sono riuscito a trovarne alcuna definizione: Qualcuno può spiegare la struttura di dispatch_after? dispatch_after(<#when: dispatch_time_t#>, <#queue: dispatch_queue_t?#>, <#block: dispatch_block_t?#>)
Sto imparando la programmazione concorrente per iOS. Finora ho letto di NSOperation/NSOperationQueue e GCD. Quali sono i motivi per usare NSOperationQueueover GCDe viceversa? Suoni come sia GCDe NSOperationQueueastrarre la creazione esplicita NSThreadsda parte dell'utente. Tuttavia la relazione tra i due approcci non mi è chiara, quindi qualsiasi feedback da apprezzare!
In Swift 2, sono stato in grado di utilizzare dispatch_afterper ritardare un'azione utilizzando la spedizione Grand Central: 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 }) Ma questo non sembra più compilarsi da Swift 3. Qual è il modo preferito di scrivere questo …
In Swift 2, sono stato in grado di creare una coda con il seguente codice: let concurrentQueue = dispatch_queue_create("com.swift3.imageQueue", DISPATCH_QUEUE_CONCURRENT) Ma questo non si compila in Swift 3. Qual è il modo preferito di scrivere questo in Swift 3?
Se puoi scegliere come target iOS 4.0 o versioni successive Usando GCD, è il modo migliore per creare singleton in Objective-C (thread-safe)? + (instancetype)sharedInstance { static dispatch_once_t once; static id sharedInstance; dispatch_once(&once, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance; }
Ho un callback che potrebbe provenire da qualsiasi thread. Quando ricevo questo callback, vorrei eseguire una determinata attività sul thread principale. Devo verificare se sono già sul thread principale - o c'è qualche penalità non eseguendo questo controllo prima di chiamare il codice qui sotto? dispatch_async(dispatch_get_main_queue(), ^{ // do work …
Ho un sacco di codice nei progetti Swift 2.x (o anche 1.x) che assomiglia a questo: // 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 = …
Nella mia app ho una funzione che crea una NSRURLSession e invia una NSURLRequest utilizzando sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error) Nel blocco di completamento per questa attività, devo eseguire alcuni calcoli che aggiungono un UIImage al viewcontroller chiamante. Ho una funzione chiamata func displayQRCode(receiveAddr, withAmountInBTC:amountBTC) che esegue il calcolo dell'aggiunta …
Quando si utilizza GCD, vogliamo attendere che vengano eseguiti e eseguiti due blocchi asincroni prima di passare alle fasi successive dell'esecuzione. Qual è il modo migliore per farlo? Abbiamo provato quanto segue, ma non sembra funzionare: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { // block1 }); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { // block2 }); …
Sto testando del codice che esegue l'elaborazione asincrona utilizzando Grand Central Dispatch. Il codice di test è simile al seguente: [object runSomeLongOperationAndDo:^{ STAssert… }]; I test devono attendere il completamento dell'operazione. La mia soluzione attuale si presenta così: __block BOOL finished = NO; [object runSomeLongOperationAndDo:^{ STAssert… finished = YES; }]; …
Vorrei un ciclo for in per inviare un gruppo di richieste di rete a Firebase, quindi passare i dati a un nuovo controller di visualizzazione una volta che il metodo termina l'esecuzione. Ecco il mio codice: var datesArray = [String: AnyObject]() for key in locationsArray { let ref = Firebase(url: …
Ho usato con successo, invio centralizzato nelle mie app, ma mi chiedevo quale sia il vero vantaggio di usare qualcosa del genere: dispatch_async(dispatch_get_main_queue(), ^{ ... do stuff o anche dispatch_sync(dispatch_get_main_queue(), ^{ ... do stuff Voglio dire, in entrambi i casi stai lanciando un blocco da eseguire sul thread principale, esattamente …
Ho creato una coda seriale come questa: dispatch_queue_t _serialQueue = dispatch_queue_create("com.example.name", DISPATCH_QUEUE_SERIAL); Qual è la differenza tra dispatch_asyncchiamato in questo modo dispatch_async(_serialQueue, ^{ /* TASK 1 */ }); dispatch_async(_serialQueue, ^{ /* TASK 2 */ }); E dispatch_syncchiamato così in questa coda seriale? dispatch_sync(_serialQueue, ^{ /* TASK 1 */ }); dispatch_sync(_serialQueue, …
Sto lottando per comprendere appieno le code simultanee e seriali in GCD. Ho alcuni problemi e spero che qualcuno possa rispondermi chiaramente e sul punto. Sto leggendo che le code seriali vengono create e utilizzate per eseguire le attività una dopo l'altra. Tuttavia, cosa succede se: Creo una coda seriale …
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.