Après avoir obtenu mais est-ce une bonne approche pour résoudre ce problème? Je ne veux tout simplement pas analyser un JSON code> Data de
Alamofire CODE> Demande, je veux l'analyser sur le fil d'arrière-plan, car un processus d'analyse est difficile et a une certaine logique dans mon cas. La première idée à résoudre était l'exécution d'une opération
async code> sur le thread d'arrière-plan avec une requête synchrone avec
alamofire code>. Mais comme je l'ai lu,
alamofire code> fonctionne complètement de manière asynchrone. La deuxième solution de mine exécutait un processus
json code> dans un autre thread après
ResponsibleJson code> de
alamofire code> est appelé. Après cela terminé, je mettrai à jour mon UI dans le fil principal. Voici comment il a l'air:
JSON code> sur le thread principal, car le processus d'analyse a un couple de
pour code> boucles et autres opérations, et je pense que cela cause le dessin de UI Stuff. p> p>
3 Réponses :
C'est parfait. C'est une approche bien respectée de ce type de tâche. P>
Il montre à quel point GCD flexible et facile à utiliser (GRAND Central Dispatch) est. P>
Il n'y a rien de mal avec les appels de GCD imbriqués vers l'expédition. P>
Oui, c'est une bonne approche, mais vous devez faire
DispatchQueue(label: "parsing", qos: .userInitiated).async {
Je serais heureux d'utiliser Jsondecoder, mais Alamofire ne le supporte pas actuellement.
Cela fait, vous pouvez faire la réponse des données au lieu de JSON, vous pouvez partager votre problème de JSON dans une autre question pertinente également.
Merci, pour le dire, mais la dernière chose à considérer est votre suggestion concernant la création de variable pour la queue code> code>. Comment cela peut-il avoir un sens? J'exécute ce code une seule fois. Et si j'ignifie que file d'attente code> à une variable, il ne sera pas utilisé de toute façon.
S'il s'agit de 1 demande, votre approche actuelle est correcte, si vous avez eu pour vous attendre à plusieurs demandes, utilisez la file d'attente globale.
IMHO, créant une file d'attente d'expédition n'est pas si cher. La mise en œuvre de l'alamofire lui-même est de beaucoup plus de frais de vue, ce qui dépêche par défaut i> sur le nsoperationqueur.Main (qui est effectivement coûteux). La meilleure approche consiste à dire à Alamofire d'utiliser une file d'attente différente lorsque vous invoquez le gestionnaire d'achèvement, comme @jonshier suggéré. L'utilisation de l'une des files d'attente de distribution globales standard est le moyen le plus rapide de répartir les fermetures et la plus «économique» et est également la plupart des États-Unis.
Les méthodes de la réponse code> d'Alamofire de code> Prenez un paramètre CODE> File d'attente CODE>, afin que vous puissiez contrôler l'emplacement de la fermeture:
responseJSON(queue: myQueue) { (response) ... }
Pourquoi Alamofire étant-il asynchrone présente-t-il un problème? La réponse que vous avez affichée est aussi bien.
Mais, je pensais que ce serait bien si Alamofire avait une telle fonction. Parce que, dans ma première option, l'idée créait un autre fil pour la mise en réseau. Fondamentalement, je m'en fiche n'est pas synchronisé ou asynchronisé dans ce cas, car il ne bloque pas l'interface utilisateur.