Blockiert NSURLConnection den Haupt-Thread?

8

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!

    
Bill 29.07.2010, 15:10
quelle

2 Antworten

10

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.

    
alexantd 12.08.2010, 02:18
quelle
-1

Wenn Sie dem Apfelbeispiel auf NSURLConnection folgen, rufen Sie den Aufruf auf wird in einem anderen Thread als dem Hauptthread behandelt.

    
mbogh 29.07.2010 15:13
quelle