Las solicitudes asincrónicas se programan en el ciclo de ejecución y se configuran como una fuente de ciclo de ejecución, activando el código automáticamente solo cuando hay datos recibidos de la red (como cualquier fuente de socket).
Las solicitudes síncronas que se ejecutan en un NSThread
monopolizan un subproceso para supervisar los datos entrantes, que en general es bastante exagerado.
Siempre puede cancelar un NSURLConnection
, incluso si se ha ejecutado de forma asincrónica, utilizando el método cancel
.
apuesto a usar la nueva API que permite enviar una solicitud asincrónica en una NSOperationQueue
(+sendAsynchronousRequest:queue:completionHandler:
) utiliza GCD bajo el capó y dispatch_source_create
, o algo similar, por lo que se comportan de la misma manera que cuando un NSURLConnection
está previsto en el ejecutar bucle, evitar usar un hilo adicional (ver los videos WWDC'12 que explica por qué los hilos son malos y su uso debe ser minimizado), la única diferencia es que le permite usar un bloque para estar informado al finalizar en lugar de usar el delegado mecanismo.
Hace algunos años, creé una clase que incorporaba NSURLConnection
llamadas asincrónicas y delegué la administración en una bonita API de bloque (ver OHURLLoader en mi github) que hace que sea más fácil de usar (no dudes en echarle un vistazo). Apuesto a que la API nueva que usa NSOperationQueue
s usa el mismo principio, sigue haciendo solicitudes asincrónicas en el runloop pero permitiéndole usar bloques en lugar de tener que implementar un delegado.
Gracias, tienes un punto :) – msk
Eso tiene sentido. ¿Cuál * es * el nuevo enfoque basado en bloques, específicamente por favor? No busco el código, solo pregunto a Google para que pueda obtener algunos documentos. – Madbreaks
@Madbreaks es 'NSURLConnection + sendAsynchronousRequest: queue: completionHandler:'. – Tommy