Подтвердить что ты не робот

У 2 объектов, создающих очереди с одинаковыми именами, имеют одну и ту же очередь

Не уверен в поведении, потому что я подозреваю, что я зашел в тупик,

У меня есть класс с несколькими объектами - каждый объект создает очередь с тем же именем. Я не уверен, что GCD повторно использует одну и ту же очередь между объектами или просто использует одно и то же имя.

Например

@interface MyClass

-(void)doSomeWork
@property (nonatomic,strong) dispatch_queue_t myQueue;

@end

@implementation MyClass

-(id)init
{
  self = [super init];
  self.myQueue = dispatch_queue_create("MyQueue",DISPATCH_QUEUE_SERIAL);
  return self;
}

-(void)doSomeWork
{
  dispatch_async(self.myQueue,^{
    // some long running work
  });
}

@end


@interface SomeClassWhichCreatesALotOfObjects

@end


@implementation SomeClassWhichCreatesALotOfObjects

-(void)someMethod
{
  for(int i = 0; i < 10000; i++)
  {
    MyClass *object = [MyClass new];
    [object doSomeWork]; // are these running in serial to each other or are each offset to the queue their object has created? Can't understand from the debugger
  }
}
@end
4b9b3361

Ответ 1

Как указано в документации Apple, ярлык:

Строковая метка для прикрепления к очереди для уникальной идентификации ее в инструментах отладки, таких как инструменты...

Он используется как подсказка, не более того.

РЕДАКТИРОВАТЬ

Здесь код, который вы хотите использовать для общей очереди.

+ (dispatch_queue_t)sharedQueue
{
    static dispatch_queue_t sharedQueue;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedQueue = dispatch_queue_create("MyQueue", NULL);
    });
    return sharedQueue;
}

Ответ 2

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