У 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
Ответы
Ответ 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
делает именно то, что предлагает название, создает очередь отправки. Ярлык, который вы ему даете, не обязательно должен быть уникальным, он просто используется для отладки.