2010-07-29 20 views
8

Estoy usando NSURLConnection en una aplicación de iPhone y la interfaz parece ralentizarse después de enviar initWithRequest: a mi instancia NSURLConnection. No estoy seguro de si esto ocurre porque mi código de procesamiento está tardando mucho tiempo en manejar la respuesta, o si es porque NSURLConnection está bloqueando el hilo principal.NSURLConnection bloquea el hilo principal?

¿Alguien puede confirmar que NSURLConnection creará la conexión y esperará los datos en un hilo separado, y luego llamará a sus métodos de delegado en el hilo principal?

Gracias!

Respuesta

10

NSURLConnection admite dos modos de funcionamiento: asíncrono y síncrono. Ninguno usa hilos separados en absoluto. Ambos usan un solo hilo, sea cual sea el hilo en el que los ejecute.

En modo síncrono, NSURLConnection bloqueará el hilo en el que lo ejecute. El modo asíncrono utiliza el ciclo de ejecución para comportarse (desde la perspectiva del desarrollador) de forma similar un hilo de fondo pero con menor sobrecarga y sin problemas de seguridad de hilos. Si usa el modo asíncrono, desea ejecutarlo en el hilo principal. No bloqueará nada.

Si su interfaz se está desacelerando, eso no es coherente con el uso de NSURLConnection de forma síncrona, lo que provocaría que su interfaz se detenga por completo hasta que se complete la solicitud.

+5

¡debe tener cuidado con la última frase! si tiene, por ejemplo, 5000 solicitudes pequeñas, la experiencia del usuario PUEDE ser que la interfaz se está desacelerando (debido a un montón de pequeñas paradas) que tuve recientemente. – Tomen

+2

El uso de NSURLConnection asíncronamente crea un hilo, uno interno. Esa es la definición de asincrónico. – malhal

-1

Si sigue el ejemplo de manzanas en NSURLConnection, la llamada se manejará en un hilo diferente al hilo principal.

Cuestiones relacionadas