Ich muss in meiner iOS-Anwendung regelmäßig Daten vom Server abrufen. Ich muss es alle 10 Sekunden in einem Thread tun, um die Benutzeroberfläche nutzbar zu halten. Diese Funktion wird ausgelöst, wenn sich der Benutzer anmeldet. Ich denke darüber nach, NSRunLoop
mit NSTimer
zu verwenden, um diese Funktionalität zu erreichen, und vielleicht AFNetworking
, um JSON-Daten zu erhalten.
Ist das der richtige Ansatz? Sollte dies mit GCD geschehen?
Wahrscheinlich ist der einzige Teil, der außerhalb des Hauptthreads ausgeführt werden muss, die Anfrage selbst. Entscheiden, dass Sie eine Anfrage benötigen und diese Anfrage erstellen, kann ohne irgendwelche ausgefallenen Sachen gemacht werden ...
Stimmen Sie mit H2CO3 überein, dass die Abfrage zu einem Problem für Ihren Server mit zu vielen Clients in der Wildnis werden könnte, aber stimme auch mit Ihnen überein, dass es nicht unbedingt ein Fehler in allen Fällen ist.
Richte einen Timer ein ...
%Vor%Führen Sie eine Anfrage aus ...
%Vor%NSTimer wird regelmäßig ausgelöst. Bei Feuer entscheidet eine Methode (im Hauptthread), ob sie abfragen muss (in dem Fall, dass Sie es beschrieben haben, immer "Ja", wenn es in einem 10 Sekunden-Zeitraum aufgerufen wird). Bilden Sie die Anfrage, NSURLConnection sendAsynchronousRequest: Verschiebt den langsamen Teil der Anfrage vom Hauptteil. Der Block auf sendAsynch läuft auf dem Haupt zurück, wenn die Anfrage erledigt ist.
Der Trick besteht darin, dass andere Teile Ihrer App eingerichtet werden müssen, um Änderungen im Modell zu beobachten und die Ansichten zu aktualisieren. Dies kann so einfach sein wie das erneute Laden einer Tabelle im sendAsynch-Block oder komplexer, wie das Einrichten einer KVO, die ausgelöst wird, wenn sich das Modell ändert.