2013-10-17 5 views
16

emin değil aynı kuyruğu seri kuyrukları oluşturmak mı - her nesne bir kuyruğu ile oluşturur aynı isim. GCD'nin nesneler arasında aynı kuyruğu yeniden kullanıp kullanmadığına veya aynı adı paylaşıp paylaşmadığına emin değilim. Örneğin<p></p> Birden nesnelerle bir sınıf var, 2 nesneler aynı ada sahip davranışı üzerindeki

Apple'ın belgelerine devletler olarak
@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 

cevap

22

, etikettir:

bir dize etiket ...

benzersiz şekilde Instruments gibi araçlar ayıklama bunu tespit etmek kuyruğa girmesi için

Bir ipucu olarak kullanılır, başka bir şey değildir.

DÜZENLEME

İşte paylaşılan bir sıra kullanarak için istediğiniz kod.

+ (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

böylece ayrı sıralardır. Şimdi aynı sınıftaki nesneler arasında kullanılan bir kuyruğu nasıl oluşturabilirim? –

+0

Kodu dahil etmek için cevabı düzenledim. –

+0

Kuyruk adı dizesini bu işleve parametre olarak iletmek tamam mı? @GuyKogus –

7

dispatch_queue_create bir gönderme kuyruğu oluşturur, adından da anlaşılacağı tam olarak ne yapar. Verdiğiniz etiketin benzersiz olması gerekmez, sadece hata ayıklama amacıyla kullanılır.

İlgili konular