2013-10-17 8 views
16

Non sono sicuro sul comportamento, perché ho il sospetto che sto ottenendo una situazione di stallo,Fare 2 oggetti creando code di serie con lo stesso nome di condivisione stessa coda

Ho una classe con più oggetti - ogni oggetto crea una coda con lo stesso nome Non sono sicuro che GCD stia riutilizzando la stessa coda tra gli oggetti o se condividono solo lo stesso nome.

Per esempio

@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 

risposta

22

Come stati di documentazione di Apple, l'etichetta è:

Un'etichetta stringa da allegare alla coda per identificare in modo univoco in strumenti come strumenti di debug ...

È usato come suggerimento, niente di più.

EDIT

Ecco il codice che si desidera per l'utilizzo di una coda condivisa.

+ (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; 
} 
+0

quindi sono code separate. Ora come posso creare una coda usata tra oggetti della stessa classe –

+0

Ho modificato la risposta per includere il codice. –

+0

È corretto passare la stringa del nome della coda come parametro per questa funzione? @GuyKogus –

7

dispatch_queue_create fa esattamente ciò che suggerisce il nome, si crea una coda di spedizione. L'etichetta che gli hai dato non è richiesta per essere unica, è solo usata per scopi di debug.

Problemi correlati