Из GCD Reference : typedef struct dispatch_queue_s *dispatch_queue_t;
Может быть, я лаю не на том дереве, но моя интуиция подсказала бы мне, что более идиоматичным решением может быть использование функции dispatch_once внутри метода класса, чтобы получить очередь, в которую могут отправлять работу несколько экземпляров класса (это не C ++ но вы поняли основную идею):
+ (dispatch_queue_t)sharedQueue
{
static dispatch_once_t pred;
static dispatch_queue_t sharedDispatchQueue;
dispatch_once(&pred, ^{
sharedDispatchQueue = dispatch_queue_create("theSharedQueue", NULL);
});
return sharedDispatchQueue;
}
dispatch_once
гарантирует, что создание очереди происходит только один раз за все время выполнения, поэтому вы можете безопасно и дешево вызывать [YourClass sharedQueue]
так часто, как вам нужно, в любом месте.
Однако моя интуиция также сказала бы, что разделение очередей между классами / объектами пахнет немного плохо. Если вы просто хотите, чтобы очередь всего приложения отправляла разные задания, хватит ли глобальной очереди? Если вы хотите интенсивно работать с большими коллекциями объектов, я бы инстинктивно создал для них отдельную очередь. Может быть, есть более элегантный способ делать то, что вы хотите?