#iphone #ios #ios4 #grand-central-dispatch
#iPhone #iOS #ios4 #grand-central-dispatch
Вопрос:
В моем приложении iOS есть кнопка обновления, которая запускает очередь асинхронной отправки в GCD. Имя очереди является пользовательским. Могут возникать проблемы, когда пользователь нажимает на кнопку, что приводит к созданию большого количества ненужных очередей. Я надеюсь проверить, активна ли очередь с определенным именем, чтобы я не смог запустить другую очередь или добавить в ту же очередь с тем же именем.
Возможно ли это?
Ответ №1:
Я не думаю, что вам следует создавать новые очереди при каждом запросе. И поскольку вы, похоже, не беспокоитесь о том, что они будут последовательными, поскольку вы создаете новые очереди для выполнения каждого блока, я предлагаю вам использовать глобальные очереди для запуска ваших блоков. Оба действия являются синонимами, поскольку это конечные целевые очереди для создаваемых вами очередей отправки. Получение очереди простое и должно заменить код, в котором вы создаете свою собственную очередь.
dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
Если вы хотите, чтобы они запускались последовательно, вам следует определить свою собственную очередь в качестве переменной экземпляра, чтобы создавать ее только один раз и использовать одну и ту же каждый раз, когда вам нужно отправить блок.
Ответ №2:
Ну, вы можете поддерживать изменяемый словарь с добавленными объектами
[dict setobject:<your object> forkey:<the queue name>]
Когда вы отправляете последующий запрос, тогда в методе вы можете проверить следующее:
object = [dict objectforkey:<queue name>]
if (object == nil)
//send the request
По завершении работы с очередью удалите пару ключ-объект из словаря.
[dict removeobjectforkey: < queue name >
Ответ №3:
Нет, нет способа получить последовательную очередь из системы по имени. Вам необходимо создать последовательную очередь самостоятельно.