Ich verwende NSURLConnection
in einer iPhone-Anwendung und die Benutzeroberfläche scheint langsamer zu werden, nachdem initWithRequest:
an meine NSURLConnection
-Instanz gesendet wurde. Ich bin mir nicht sicher, ob dies geschieht, weil mein Verarbeitungscode lange braucht, um die Antwort zu verarbeiten, oder weil NSURLConnection
den Hauptthread blockiert.
Kann jemand bestätigen, dass NSURLConnection
die Verbindung erstellt und auf Daten in einem separaten Thread wartet und dann seine Delegate-Methoden im Hauptthread aufruft?
Danke!
NSURLConnection unterstützt zwei Betriebsmodi: asynchron und synchron. Weder verwendet separate Threads überhaupt. Sie benutzen beide nur einen Thread, das ist der Thread, in dem Sie sie ausführen.
Im synchronen Modus blockiert NSURLConnection den Thread, in dem Sie es ausführen. Der asynchrone Modus verwendet die Ausführungsschleife, um (aus der Entwicklerperspektive) ähnlich wie ein Hintergrundthread zu arbeiten, jedoch mit weniger Aufwand und ohne Thread-Sicherheitsprobleme. Wenn Sie den asynchronen Modus verwenden, möchten Sie ihn im Hauptthread ausführen. Es wird nichts blockieren.
Wenn Ihre Schnittstelle langsamer wird, ist dies nicht konsistent mit der synchronen Verwendung von NSURLConnection, was stattdessen dazu führen würde, dass Ihre Schnittstelle vollständig gestoppt wird, bis die Anforderung abgeschlossen ist.
Wenn Sie dem Apfelbeispiel auf NSURLConnection folgen, rufen Sie den Aufruf auf wird in einem anderen Thread als dem Hauptthread behandelt.
Tags und Links iphone multithreading nsurlconnection