использовать поток / блок-безопасный сбор для координации нескольких асинхронных операций?(NSMutableArray или NSMutableSet) - PullRequest
1 голос
/ 23 марта 2012

Я пишу некоторый код для синхронизации объектов между клиентом и сервером.Он включает в себя кучу HTTP-вызовов (которые я делаю не сам, а используя библиотеку Parse) с блоками для обратных вызовов.Я хочу дождаться завершения набора этих вызовов, а затем предпринять дальнейшие действия.По пути мне нужно где-то хранить результаты каждого вызова.

Самый простой способ, о котором я могу думать, - это сохранить счетчик и коллекцию - что-то вроде NSMutableArray или NSMutableSet.Каждый раз, когда операция HTTP завершается, я сохраняю ее результат в коллекции и увеличиваю счетчик.Затем я проверяю счетчик, и, если он равен общему количеству операций, я перехожу к следующему шагу.(Я предлагаю счетчик, а не размер коллекции, поскольку мне, возможно, не нужно хранить объект для каждого HTTP-вызова.)

Но я предполагаю, что сталкиваюсь с проблемами безопасности потоков: что происходит, когдадва вызова возвращаются одновременно, и оба пытаются добавить в коллекцию и / или увеличить счетчик?

Какое здесь решение?

Спасибо!

1 Ответ

1 голос
/ 23 марта 2012

Это то, что GCD предназначен для обработки. То, что вы хотите, называется группами рассылки. См. GCD Reference и посмотрите раздел «Использование групп рассылки». В группе диспетчеризации вы отправляете различные блоки как часть группы, а также блок «уведомление», который вызывается по завершении группы, независимо от того, как они запланированы.

...