Как определить текущие асинхронные очереди отправки GCD - PullRequest
0 голосов
/ 13 июня 2011

В моем приложении iOS есть кнопка обновления, которая запускает очередь асинхронной отправки в GCD. Имя очереди является пользовательским. Могут быть проблемы, когда пользователь нажимает на кнопку и вызывает создание большого количества ненужных очередей. Я надеюсь проверить, существует ли активная очередь с определенным именем, чтобы я не смог запустить другую очередь или добавить в ту же очередь с тем же именем.

Возможно ли это?

Ответы [ 3 ]

2 голосов
/ 17 июня 2011

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

dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

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

0 голосов
/ 17 июня 2011

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

0 голосов
/ 13 июня 2011

Ну, вы можете поддерживать изменяемый словарь с добавленными объектами

[dict setobject:<your object> forkey:<the queue name>]

Когда вы отправляете последующий запрос, то в методе вы можете проверить следующее:

object = [dict objectforkey:<queue name>]

if (object == nil)
//send the request

Когдаоперация очереди завершена, удалите пару ключ-объект из словаря.

[dict removeobjectforkey: < queue name >
...