2015-01-29 4 views
-1

У меня есть функция, которая перебирает список элементов, отправляя их на сервер и захватывая ответ. Проблема, с которой я столкнулась, - это цикл, который работает быстрее, чем сервер может обрабатывать. Мне нужно выяснить способ замедления цикла без замораживания приложения. Есть ли способ задержать цикл от перехода к следующему пункту на короткое время? На других языках я бы использовал что-то вроде сна (интервал).slow down for in loop

+1

Это не имеет никакого смысла. Почему вы хотите замедлить процесс сервера? – Rafael

+0

Я не замедляю процесс сервера. Я замедляю время между каждым запросом, отправляемым на сервер. В настоящее время как есть, цикл отправляет все запросы (300+) так быстро, как может, что приводит к ошибкам тайм-аута. – BooMSticK

ответ

0

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

Также я не думаю, что вы должны пытаться спать, так как он будет удерживать основной поток, что приводит к плохой работе с пользователем.

+0

Похоже, это был бы достойный метод достижения моей конечной цели. Я просто не знаю, как использовать блок завершения. Все примеры, которые я нашел, были основаны на анимации. Есть ли у вас пример работы с http-функциями? Я использую метод post для отправки данных на сервер. – BooMSticK

+0

@BooMSticK Проверьте AFNetworking. Если вы не можете переключиться на другую библиотеку, вы можете проверить этот код для реализации блоков. – GoodSp33d

1

Не замедляйте процесс. Добавьте сетевые вызовы в очередь операций с ограниченным числом одновременных операций. Возможно, вам придется переписать сетевой код как подкласс NSOperation, но это довольно просто. Вы можете увидеть некоторые примеры в this tutorial.

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