Мені подобалось 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, що було моєю останньою скаргою на фреймворк (невелика помилка, що закінчується, стала причиною того, що завантаження не вдалося отримати з AF, але завершено штрафом з ASI). Автентифікація не є проблемою для AFnetworking, оскільки для складних методів аутентифікації ви можете підкласифікувати операцію та здійснити власні дзвінки, а AFHTTPClient робить основну автентифікацію шматочком торта. Підкласифікуючи AFHTTPClient, ви можете за короткий час зробити повного споживача послуги.
Не кажучи вже про абсолютно необхідні доповнення UIImage, які пропонує AFNetworking. За допомогою блоків та спеціальних блоків завершення та деякого розумного алгоритму ви можете легко переглядати таблиці з асинхронним завантаженням зображень та заповненням комірок, тоді як в ASI вам довелося робити черги операцій для зменшення пропускної здатності та пам’ятати про те, щоб скасувати та відновити чергу операцій відповідно до видимість подання таблиці та подібні речі. Час розробки таких операцій скоротився вдвічі.
Я також люблю блоки успіху та невдачі. ASI має лише блок завершення (який фактично є блоком завершення NSOperation). Вам довелося перевірити, чи не відбулася помилка при завершенні, і діяти відповідно. Для складних веб-сервісів ви можете загубитися у всіх "ifs" та "elses"; У AFNetworking справи набагато простіші та інтуїтивніші.
ASI був чудовим для свого часу, але за допомогою AF ви можете повністю змінити спосіб керування веб-сервісами повністю та легше робити масштабовані програми. Я дійсно вважаю, що більше немає причин залишатися з ASI, якщо ви не хочете націлювати на iOS 3 і нижче.
ASIFallbackToCacheIfLoadFailsCachePolicy
дуже хороший. І я думаю, що AFNetworking не має постійної підтримки кешу. Це не для мене.