2

Мне нужно выполнить сценарий со следующими шагами:Должен ли я использовать очередь операций для этого полного сценария?

  1. Для того, чтобы сетевой вызов с некоторыми параметрами поиска, предоставленных пользователем
  2. Затем разобрать свой ответ JSON и создавать модели объектов
  3. Тогда , для каждого созданного объекта и если у него есть связанный URL изображения, для вызова соответствующей службы для загрузки такого изображения и отображения его в UICollectionView при завершении загрузки.

Мне нужно обрабатывать одновременные сетевые вызовы при загрузке N-изображений, которые мне нужны. Пользователь должен иметь возможность отменить текущий поток поиска и запустить новый. Кроме того, я должен принять во внимание, что ячейка для определенного изображения еще не была отображена или она была удалена. Итак, мой вопрос: какой будет лучший подход для этого?

  • Выполнение первого сетевого вызова (без параллелизма) и ответ JSON синтаксического анализа непосредственно с помощью URLSession и URLSessionDownloadTask, и используя Operation и OperationQueue для последующих шагов. Используйте как invalidateAndCancel() для URLSession, так и cancelAllOperations() для OperationQueue, если пользователь хочет отменить текущий поиск.
  • Выполните полный процесс, используя Operation и OperationQueue.
  • Любой другой и более подходящий подход?
+0

Для последующих сетевых вызовов, потому что у них нет зависимости или приоритет среди них, используя NSOperationQueue (чья первичная выгода в этом случае, о которой я могу думать, это зависимость и приоритет) не добавляет значения, которое я считаю. Вы можете запустить несколько задач с данными NSURLSession и позже вызвать invalidateAndCancel на URLSession имеет смысл. Однако, чтобы загрузить изображение и показать его в CollectionView, я предпочитаю использовать SDWebImage. Он много кэширует, загружает изображение и обновляет пользовательский интерфейс сам по себе, эффективно отображает изображение в коллекцииView/tableView: D –

ответ

0

Наилучшим подходом было бы выполнить либо синхронный, либо асинхронный вызов для совершения первого служебного вызова. После завершения разобрать json синхронно, а затем использовать ленивую концепцию загрузки (асинхронный вызов) для загрузки, если любые изображения должны быть загружены для отображения изображений.

+0

Синхронизация сетевого вызова !!! Хм, что интересно, какой API NSURLSession делает синхронный вызов ??? Насколько мне известно, Синхронный API для сетевого вызова отсутствует. –

+0

Не NSURLSession. NSURLSession или URLSession - это полный вызов службы async. Вы можете использовать NSURLConnection, который устарел. Хотя я не вижу в этом необходимости. – NKB

+0

Извините, возможно, заголовок моего вопроса был немного запутанным ... на самом деле мой вопрос заключается в использовании 'URLSession' или (async) 'Operations' – AppsDev

0

Выполнение сетевого вызова, а затем создание объектов модели. верните их в свой VC через блок завершения API.

Затем перезагрузите представление коллекции и передать URL для каждой ячейки и есть каждая клетка беспокоиться о себе, использовать что-то вроде SDWebImage, чтобы показать изображения асинхр в клетках ..