0

So ist die Aufgabe die folgenden: 1) Ich habe eine Track-ID, ich muss den Server nach allen Track-Daten fragen 2) analysieren Antwort (hier habe ich auch eine Album-ID) 3) Jetzt habe ich eine Album - ID, ich muss den Server nach allen Albumdaten fragen 4) Antwort analysieren (hier habe ich auch eine Künstler ID) 5) jetzt habe ich eine Künstler ID, ich muss die fragen Server für alle Künstlerdateneine Reihe von Anfragen mit gcd

Ich frage mich, was ist der richtige Weg, dies mit gcd zu tun. 3 dispatch_sync-s innerhalb von dispatch_async? Ich möchte all dies zu einer Operation, im Hintergrund laufen, so zuerst dachte ich über NSOperation, aber alle Callbacks, Parsing, Speichern von Kerndaten müssen im Hintergrund Thread passieren, so dass ich einen separaten Lauf erstellen müsste Schleife für Rückrufe, um sicherzustellen, dass es nicht getötet wird, bevor ich eine Antwort bekomme und ui nicht blockieren werde.

also ist die Frage, wie soll ich hier gcd verwenden, oder ist es besser, mit nsoperation und einem Runloop-Thread für Rückrufe zu gehen? Danke

+1

GCD garantiert nicht den Betrieb auf einem einzigen Hintergrund-Thread. GCD-Warteschlangen sind nur eine Liste von auszuführenden Operationen, NICHT ein Thread, um sie auszuführen. Es teilt die Aufgabe nach Belieben in mehrere Threads auf. – borrrden

Antwort

1

Ich würde vorschlagen, NSOperation und Callbacks auf dem Hauptthread ausgeführt.

Wenn Sie darüber nachdenken, ist Ihr Workflow ziemlich sequenziell: 1 -> 3 -> 5; Die Parsing-Schritte (2 und 4) sind vermutlich nicht so teuer, so dass Sie sie auf einem separaten Thread ausführen möchten (ich denke, sie sind überhaupt nicht teuer und Sie können die Parsing-Zeit im Vergleich zur Wartezeit für die Netzwerkkommunikation vernachlässigen).

Außerdem, wenn Sie einen Kommunikations-Framework wie AFNetworking (oder sogar NSURLConnection + Blöcke) wird Ihr Workflow recht einfach zu implementieren:

  1. Spurdaten abrufen
  2. in Antworthandler "Track-Daten abrufen" , Album-ID erhalten, dann neue Anfrage für "Album-Daten" senden;
  3. in Response-Handler "Albumdaten abrufen", Künstler-ID erhalten, und so weiter ...
+0

+1 für NSOperation – CarlJ

+0

Ich glaube nicht, dass Sie sogar 'NSOperation' brauchen. Vorausgesetzt, die asynchronen Methoden von 'NSURLConnection' werden verwendet, warum nicht alles im Hauptthread tun. – JeremyP