0
votes

Comment analyser JSON en filetage d'arrière-plan après la fin de la demande d'alamofire?

Après avoir obtenu JSON Data de Alamofire 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 sur le thread d'arrière-plan avec une requête synchrone avec alamofire . Mais comme je l'ai lu, alamofire fonctionne complètement de manière asynchrone. La deuxième solution de mine exécutait un processus json dans un autre thread après ResponsibleJson de alamofire est appelé. Après cela terminé, je mettrai à jour mon UI dans le fil principal. Voici comment il a l'air: xxx

mais est-ce une bonne approche pour résoudre ce problème? Je ne veux tout simplement pas analyser un JSON sur le thread principal, car le processus d'analyse a un couple de pour boucles et autres opérations, et je pense que cela cause le dessin de UI Stuff.


2 commentaires

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.


3 Réponses :


1
votes

C'est parfait. C'est une approche bien respectée de ce type de tâche.

Il montre à quel point GCD flexible et facile à utiliser (GRAND Central Dispatch) est.

Il n'y a rien de mal avec les appels de GCD imbriqués vers l'expédition.


0 commentaires

2
votes

Oui, c'est une bonne approche, mais vous devez faire

DispatchQueue(label: "parsing", qos: .userInitiated).async {


5 commentaires

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 . Comment cela peut-il avoir un sens? J'exécute ce code une seule fois. Et si j'ignifie que file d'attente à 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 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.



3
votes

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) 
    ...
}


0 commentaires