Мне понравился ASIHTTPRequest, и мне было грустно видеть, как это происходит. Однако разработчик ASI был прав, ASIHTTPRequest стал настолько большим и раздутым, что даже он не мог выделить время, чтобы привести его в соответствие с новейшими функциями iOS и других фреймворков. Я перешел и теперь использую AFNetworking.
Тем не менее, я должен сказать, что AFNetworking гораздо более нестабилен, чем ASIHTTP, и для вещей, для которых я его использую, он нуждается в уточнении.
Мне часто нужно сделать HTTP-запросы к 100 источникам HTTP, прежде чем я отобразлю свои результаты на экране, и я поместил AFHTTPNetworkOperation в очередь операций. Прежде чем загрузить все результаты, я хочу иметь возможность отменить все операции в очереди операций, а затем закрыть контроллер представления, содержащий результаты.
Это не всегда работает.
Я получаю сбои в случайное время с AFNetworking, в то время как с ASIHTTPRequest эти операции работали безупречно. Я хотел бы сказать, какая конкретная часть AFNetworking дает сбой, поскольку он продолжает падать в разных точках (однако в большинстве случаев отладчик указывает на NSRunLoop, который создает объект NSURLConnection). Таким образом, AFNetworking должен завершиться, чтобы считаться завершенным, как было ASIHTTPRequest.
Кроме того, ASIHTTPRequests поддерживает аутентификацию клиента, которой в AFNetworking в данный момент не хватает. Единственный способ реализовать это - создать подкласс AFHTTPRequestOperation и переопределить методы аутентификации NSURLConnection. Однако, если вы начнете связываться с NSURLConnection, вы заметите, что поместить NSURLConnection в оболочку NSOperation и записать блоки завершения не так сложно, как кажется, и вы начнете думать, что удерживает вас от выгрузки сторонних библиотек.
ASI использует совершенно другой подход, поскольку он использует CFNetworking (базовые платформы более низкого уровня на основе C), чтобы сделать возможной загрузку и загрузку файлов, полностью пропуская NSURLConnection и касаясь концепций, большинство из нас, разработчиков OS X и iOS, слишком боятся к. Благодаря этому вы получаете лучшую загрузку и скачивание файлов, даже кеш веб-страниц.
Что я предпочитаю? Сложно сказать. Если AFNetworking созреет достаточно, мне понравится больше, чем ASI До тех пор я не могу не восхищаться ASI, и тем, как он стал одной из самых используемых сред всех времен для OS X и iOS.
EDIT:
Думаю, пришло время обновить этот ответ, так как после этого сообщения все немного изменилось.
Этот пост был написан некоторое время назад, и AFNetworking достаточно созрел. 1-2 месяца назад AF опубликовал небольшое обновление для операций POST, которое было моей последней жалобой на структуру (небольшая ошибка окончания строки была причиной того, что загрузка echonest завершилась неудачно с AF, но была завершена нормально с ASI). Аутентификация не является проблемой для AFnetworking, так как для сложных методов аутентификации вы можете разделить операцию на подклассы и сделать свои собственные вызовы, а AFHTTPClient делает простую аутентификацию простой. Используя подклассы AFHTTPClient, вы можете сделать потребителя всего сервиса за короткое время.
Не говоря уже о абсолютно необходимых дополнениях UIImage, которые предлагает AFNetworking. С блоками и настраиваемыми блоками завершения и некоторым умным алгоритмом вы можете довольно легко создавать представления таблиц с асинхронной загрузкой изображений и заполнением ячеек, тогда как в ASI вам приходилось создавать очереди операций для регулирования пропускной способности и не забывать отменять и возобновлять очередь операций в соответствии с видимость таблицы и тому подобное. Время разработки таких операций сократилось вдвое.
Мне также нравятся блоки успеха и неудач. ASI имеет только блок завершения (который фактически является блоком завершения NSOperation). Вы должны были проверить, была ли у вас ошибка при завершении, и действовать соответствующим образом. Для сложных веб-сервисов вы можете потеряться во всех «ifs» и «elses»; В AFNetworking все гораздо проще и понятнее.
ASI отлично подходил для своего времени, но с помощью AF вы можете полностью изменить способ обработки веб-сервисов и упростить создание масштабируемых приложений. Я действительно считаю, что нет никаких оснований больше придерживаться ASI, если только вы не хотите использовать iOS 3 и ниже.