AFnetworking против dispatch_aync() против SDWebImage Framework

Я новичок в программировании для iOS.

У меня есть требование, когда мне приходится много раз выполнять вызовы сервера, выдавая большой JSON, а затем анализируя и показывая в TableView/Collection/View Controllers.

И я должен загружать изображения внутри Collection Grid View и UITableView, тем самым запуская/отменяя загрузку изображений при прокрутке пользователя.

So

Q1) Для загрузки изображения в представлении таблицы/представлении сетки я думаю использовать пример отложенной загрузки Apple Table + заменить Icon Downloader на тот, что из SDWebImage, как указано здесь, в ссылке несколько проблем в этом примере Apple, и через SDWebImage я могу настроить cache в соответствии с моим требование.

РЕДАКТИРОВАТЬ: По сути, я хотел бы иметь очень прозрачный способ получения изображений из URL-адреса, поэтому сначала найдите их в NSCache, если не найдено, посмотрите на диск (или Core Data), если не найдено снова загрузите async, а затем снова сохраните в кеше. Я думаю, что SDWebImage предоставляет это, но для AFNetworking мне нужно заглянуть внутрь кода и изменить его.

Отложенная загрузка изображений таблиц в iOS

Q2) Для вызовов сервера и анализа JSON следует ли мне использовать dispatch_async, а затем анализировать JSON с помощью NSJSONSerialization, или мне следует использовать AFNetworking для этого

Недостаток использования AFNetworking lib заключается в том, что мне нужен только вызов сервера и анализ других функций. ).

Это то, что я нашел после долгих гуглений. Пожалуйста, предложите, если я что-то упустил... и любой другой подход, которому я должен следовать.


person Rohit Singhal    schedule 27.01.2014    source источник


Ответы (1)


AFNetworking лучше и может справиться с обеими вашими проблемами. Вы также можете использовать его для анализа, а также для загрузки изображений. Он может даже кэшировать и никогда не будет снова и снова обращаться к серверу, если одно и то же изображение запрашивается представлением изображения. Используйте категорию UImageView, представленную в AFNetworking.

Изменить Кэширование в Afnetworking прочитанных сообщений в этой публикации. Если вы не хотите использовать полную функциональность AFNetworking и хотите просто загружать данные, я предлагаю вам не использовать его. Вы можете сделать все это с помощью NSURSession. Не добавляйте зависимости в свой проект. Используйте NSURLSession, это сильно и может помочь вам. Вам нужен только один вызов NSJSONSerilization для разбора данных в NSObject, это не так уж и сложно.

NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                         completionHandler:
     ^(NSData *data, NSURLResponse *response, NSError *error) {
         // ...
     }];

 [task resume];
person Adnan Aftab    schedule 27.01.2014
comment
Большое спасибо за эту информацию. Но у меня есть сомнения, можем ли мы настроить кэш в AFNetworking в соответствии с нашими требованиями? - person Rohit Singhal; 27.01.2014
comment
Каковы ваши требования ... Вы даже можете расширить это, чтобы переместить кеш на диск или любые другие изменения, которые вы хотите сделать ... - person Adnan Aftab; 27.01.2014
comment
github.com/AFNetworking/AFNetworking/pull/1136 прочитайте эту ссылку, вы найдете некоторые интересное обсуждение кэширования. - person Adnan Aftab; 27.01.2014
comment
Спасибо за информацию C_X, но я решил перейти на SDWebImage, следуя этому stackoverflow.com/questions/8703877/. Не могли бы вы изучить это? Спасибо - person Rohit Singhal; 27.01.2014
comment
SDWebImage также является очень хорошим API, вы будете включать больше зависимостей. В остальном все в порядке. Теперь, если вы не используете полную функциональность AFNetworking, почему бы вам не начать использовать NSURLSession для загрузки данных JSON, это тоже вариант. - person Adnan Aftab; 27.01.2014