Следующее украдено из документации разработчика:
Отправка очередей и других отправлений
объекты являются подсчитанными данными
типы. Когда вы создаете сериал
очередь отправки, имеет начальный
счетчик ссылок 1. Вы можете использовать
dispatch_retain и dispatch_release
функции для увеличения и уменьшения
это количество ссылок по мере необходимости. когда
счетчик ссылок очереди достигает
ноль, система асинхронно
освобождает очередь.
Когда ваше приложение больше не нужно
очередь отправки, она должна освободить
это с функцией dispatch_release.
Все ожидающие блоки, представленные в
очередь содержит ссылку на эту очередь,
поэтому очередь не освобождается до
все ожидающие блоки завершены.
Примечание: вам не нужно сохранять или
выпустить любую глобальную рассылку
очереди, в том числе одновременные
очереди отправки или главная отправка
очередь. Любые попытки сохранить или
освободить очереди игнорируются.
Так что где бы вы ни использовали -retain, используйте dispatch_retain, а где-либо, где вы будете использовать -release, используйте dispatch_release.
Очереди отправки следуют тем же общим соглашениям об управлении памятью, что и объекты target-c. И они не будут освобождены, пока все блоки, поставленные в очередь, не будут закончены.
Если вам нужен способ закрыть очередь отправки: невозможно отменить все блоки в очереди с помощью какого-либо API, поэтому они всегда должны выполняться до конца. Одним из способов ускорить этот процесс является наличие в классе переменной BOOL, управляющей очередью отправки: _isValid. Если вы хотите закрыть очередь, вы можете установить для _isValid значение NO. Все блоки, отправленные в очередь, должны сначала проверить _isValid, прежде чем выполнять какую-либо работу.
Дополнительный комментарий: может быть более целесообразно использовать NSOperationQueue. См. сообщение в блоге Криса Хансона .