2016-08-27 3 views
0

мне нужно попасть в следующих ситуациях один и тот же endpoint:NSOperationsQueue: Управление идентичные запросы

  1. Когда представление появляется на экране viewWillAppear.
  2. Каждые 5 секунд в течение жизненного цикла контроллера вида (пока отображается представление).
  3. После того, как приложение вернется с background до foreground.

Это создает по крайней мере 2, если не 3, concurrent запросы к одной и той же endpoint, когда мое приложение возвращается к foreground, особенно во время медленного интернет-соединения.

Я знаю, что может ограничить количество запросов concurrent в Queue 1, но иногда у меня есть необходимость ударить несколько различных endpointsconcurrently, так что я надеюсь найти альтернативу.

Я использую NSURLSession с NSOperationsQueue, чтобы совершать эти звонки. Есть ли лучший способ справиться с этим с NSOperationsQueue?

+0

Вы можете написать класс контроллера трафика для управления очередью. Если операция URL находится в ожидании или была завершена в течение последних 5 секунд, то игнорировать новый запрос на вставку. –

ответ

1

Можно объединить (объединить) подклассы NSOperation вместе, чтобы устранить любые избыточные сетевые вызовы. Для этого каждая операция должна иметь identifier, которая является уникальной для задачи (а не самой операции) и может использоваться для определения того, находится ли эта операция в очереди. Как только операция определена как находящаяся в очереди, мы можем затем выполнить обратный вызов блока/замыкания новой операции и вставить ее в более раннюю структуру операций, чтобы гарантировать, что когда задача старой задачи будет завершена, оба обратных вызова будут вызваны. Это помогает избежать сценария, в котором у вас отсутствуют обратные вызовы в вашем приложении.

Я написал статью, которая охватывает эту точную тему:

http://williamboles.me/removing-bolierplate-when-coalescing-nsoperations/

Обратите внимание, что это работает только для операций, которые все еще находятся в очереди, если вы хотите ограничить операции на основе временной интервал, то вам нужно расширить свой «контроллер трафика», например, «Code Different».

Смежные вопросы