Grand Central Dispatch (GCD) fournit un mécanisme simple et robuste pour les opérations simultanées et asynchrones, principalement dans les systèmes d'exploitation Apple (par exemple, iOS, macOS, watchOS et tvOS), mais aussi FreeBSD et MidnightBSD.
Existe-t-il un moyen d'appeler un bloc avec un paramètre primitif après un délai, comme en utilisant performSelector:withObject:afterDelay:mais avec un argument comme int/ double/ float?
Je suis passé par l' iBook d'Apple et trouvé aucune définition de celui-ci: Quelqu'un peut-il expliquer la structure de dispatch_after? dispatch_after(<#when: dispatch_time_t#>, <#queue: dispatch_queue_t?#>, <#block: dispatch_block_t?#>)
J'apprends la programmation simultanée pour iOS. Jusqu'à présent, j'ai lu sur NSOperation/NSOperationQueue et GCD. Quelles sont les raisons d'utiliser NSOperationQueueOver GCDet vice versa? Sonne comme les deux GCDet NSOperationQueuerésume la création explicite NSThreadsde l'utilisateur. Cependant, la relation entre les deux approches n'est pas claire pour moi, donc toute rétroaction est …
Dans Swift 2, j'ai pu utiliser dispatch_afterpour retarder une action à l'aide de Grand Central Dispatch: 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 }) Mais cela ne semble plus se compiler depuis Swift 3. Quelle est la meilleure façon d'écrire ceci dans …
Dans Swift 2, j'ai pu créer une file d'attente avec le code suivant: let concurrentQueue = dispatch_queue_create("com.swift3.imageQueue", DISPATCH_QUEUE_CONCURRENT) Mais cela ne se compile pas dans Swift 3. Quelle est la meilleure façon d'écrire ceci dans Swift 3?
Si vous pouvez cibler iOS 4.0 ou supérieur À l'aide de GCD, est-ce le meilleur moyen de créer un singleton en Objective-C (thread safe)? + (instancetype)sharedInstance { static dispatch_once_t once; static id sharedInstance; dispatch_once(&once, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance; }
J'ai un rappel qui peut provenir de n'importe quel fil. Lorsque je reçois ce rappel, je voudrais effectuer une certaine tâche sur le thread principal. Dois-je vérifier si je suis déjà sur le fil principal - ou y a-t-il une pénalité en n'effectuant pas cette vérification avant d'appeler le code …
J'ai beaucoup de code dans les projets Swift 2.x (ou même 1.x) qui ressemble à ceci: // 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 = …
Dans mon application, j'ai une fonction qui crée une NSRURLSession et envoie une NSURLRequest en utilisant sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error) Dans le bloc d'achèvement de cette tâche, je dois faire un calcul qui ajoute une UIImage au viewcontroller appelant. J'ai un func appelé func displayQRCode(receiveAddr, withAmountInBTC:amountBTC) qui effectue le …
Lors de l'utilisation de GCD, nous voulons attendre que deux blocs asynchrones soient exécutés et terminés avant de passer aux étapes d'exécution suivantes. Quelle est la meilleure façon de le faire? Nous avons essayé ce qui suit, mais cela ne semble pas fonctionner: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { // block1 }); …
Je teste du code qui effectue un traitement asynchrone à l'aide de Grand Central Dispatch. Le code de test ressemble à ceci: [object runSomeLongOperationAndDo:^{ STAssert… }]; Les tests doivent attendre la fin de l'opération. Ma solution actuelle ressemble à ceci: __block BOOL finished = NO; [object runSomeLongOperationAndDo:^{ STAssert… finished = …
Je voudrais qu'une boucle for in envoie un tas de requêtes réseau à Firebase, puis transmette les données à un nouveau contrôleur de vue une fois que la méthode a terminé son exécution. Voici mon code: var datesArray = [String: AnyObject]() for key in locationsArray { let ref = Firebase(url: …
J'utilise avec succès, une grande répartition centrale dans mes applications, mais je me demandais quel est le véritable avantage d'utiliser quelque chose comme ceci: dispatch_async(dispatch_get_main_queue(), ^{ ... do stuff ou même dispatch_sync(dispatch_get_main_queue(), ^{ ... do stuff Je veux dire, dans les deux cas, vous déclenchez un bloc à exécuter sur …
J'ai créé une file d'attente série comme celle-ci: dispatch_queue_t _serialQueue = dispatch_queue_create("com.example.name", DISPATCH_QUEUE_SERIAL); Quelle est la différence entre dispatch_asyncappelé comme ça dispatch_async(_serialQueue, ^{ /* TASK 1 */ }); dispatch_async(_serialQueue, ^{ /* TASK 2 */ }); Et dispatch_syncappelé comme ça sur cette file d'attente série? dispatch_sync(_serialQueue, ^{ /* TASK 1 */ …
J'ai du mal à comprendre pleinement les files d'attente simultanées et série dans GCD. J'ai quelques problèmes et j'espère que quelqu'un pourra me répondre clairement et précisément. Je lis que des files d'attente en série sont créées et utilisées pour exécuter les tâches les unes après les autres. Cependant, que …
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.