Me encantó ASIHTTPRequest y me entristeció verlo desaparecer. Sin embargo, el desarrollador de ASI tenía razón, ASIHTTPRequest se ha vuelto tan grande e hinchado que incluso él no pudo dedicar tiempo a equipararlo con las funciones más nuevas de iOS y otros marcos. Seguí adelante y ahora uso AFNetworking.
Dicho esto, debo decir que AFNetworking es mucho más inestable que ASIHTTP, y para las cosas para las que lo uso, necesita refinamiento.
A menudo necesito realizar solicitudes HTTP a 100 fuentes HTTP antes de mostrar mis resultados en la pantalla, y he puesto AFHTTPNetworkOperation en una cola de operaciones. Antes de que se descarguen todos los resultados, quiero poder cancelar todas las operaciones dentro de la cola de operaciones y luego descartar el controlador de vista que contiene los resultados.
Eso no siempre funciona.
Recibo bloqueos en momentos aleatorios con AFNetworking, mientras que con ASIHTTPRequest, estas operaciones funcionaban sin problemas. Me gustaría poder decir qué parte específica de AFNetworking se bloquea, ya que sigue fallando en diferentes puntos (sin embargo, la mayoría de estas veces el depurador apunta al NSRunLoop que crea un objeto NSURLConnection). Entonces, AFNetworking necesita madurar para ser considerado tan completo como lo fue ASIHTTPRequest.
Además, ASIHTTPRequests admite la autenticación del cliente, de la que AFNetworking carece en este momento. La única forma de implementarlo es subclase AFHTTPRequestOperation y anular los métodos de autenticación de NSURLConnection. Sin embargo, si comienza a involucrarse con NSURLConnection, notará que poner NSURLConnection dentro de un contenedor NSOperation y escribir bloques de finalización no es tan difícil como parece y comenzará a pensar qué le impide deshacerse de bibliotecas de terceros.
ASI usa un enfoque completamente diferente, ya que usa CFNetworking (marcos de base de nivel inferior basados en C) para hacer posible la descarga y carga de archivos, omitiendo NSURLConnection por completo y tocando conceptos a los que la mayoría de los desarrolladores de OS X e iOS tenemos demasiado miedo. Debido a esto, obtiene una mejor carga y descarga de archivos, incluso cachés de páginas web.
Cual prefiero? Es difícil de decir. Si AFNetworking madura lo suficiente, me gustará más que ASI. Hasta entonces, no puedo evitar admirar ASI y la forma en que se convirtió en uno de los marcos más utilizados de todos los tiempos para OS X e iOS.
EDITAR:
Creo que es hora de actualizar esta respuesta, ya que las cosas han cambiado un poco después de esta publicación.
Esta publicación fue escrita hace algún tiempo y AFNetworking ha madurado lo suficiente. Hace 1 o 2 meses, AF publicó una pequeña actualización para las operaciones POST que fue mi última queja sobre el marco (una pequeña falla al final de la línea fue la razón por la que fallaron las cargas echonest con AF, pero se completaron bien con ASI). La autenticación no es un problema con AFnetworking, ya que para los métodos de autenticación complejos puede subclasificar la operación y hacer sus propias llamadas y AFHTTPClient hace que la autenticación básica sea pan comido. Al crear una subclasificación de AFHTTPClient, puede convertirse en un consumidor de servicios completo en poco tiempo.
Sin mencionar las adiciones de UIImage absolutamente necesarias que ofrece AFNetworking. Con bloques y bloques de finalización personalizados y algún algoritmo inteligente, puede crear vistas de tabla con descarga de imágenes asincrónicas y llenado de celdas con bastante facilidad, mientras que en ASI tenía que hacer colas de operaciones para la limitación del ancho de banda y tener cuidado de cancelar y reanudar la cola de operaciones de acuerdo con visibilidad de vista de tabla y cosas así. El tiempo de desarrollo de tales operaciones se ha reducido a la mitad.
También me encantan los bloques de éxito y fracaso. ASI solo tiene un bloque de finalización (que en realidad es el bloque de finalización de NSOperation). Debía verificar si tuvo un error al finalizar y actuar en consecuencia. Para servicios web complejos, puede perderse en todos los "si" y "elses"; En AFNetworking, las cosas son mucho más simples e intuitivas.
ASI fue excelente para su época, pero con AF puede cambiar la forma en que maneja los servicios web completamente de una buena manera y hacer aplicaciones escalables más fácilmente. Realmente creo que ya no hay ninguna razón para seguir con ASI, a menos que desee apuntar a iOS 3 y versiones anteriores.
ASIFallbackToCacheIfLoadFailsCachePolicy
es muy bueno. Y creo que AFNetworking no tiene soporte de caché persistente. Esto es un no-go para mí.