2013-10-17 8 views
16

व्यवहार पर सुनिश्चित नहीं हैं कि एक ही नाम हिस्सेदारी के साथ धारावाहिक कतारों बनाने करो,, 2 वस्तुओं एक ही कतार

मैं कई वस्तुओं के साथ एक वर्ग है - प्रत्येक वस्तु के साथ एक कतार बनाता है वही नाम। मुझे यकीन नहीं है कि क्या जीसीडी वस्तुओं के बीच एक ही कतार का उपयोग कर रहा है या यदि वे सिर्फ वही नाम साझा करते हैं।

उदाहरण के लिए

@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 

उत्तर

22

के रूप में एप्पल के प्रलेखन राज्यों, लेबल है:

एक स्ट्रिंग लेबल कतार में संलग्न करने के लिए विशिष्ट रूप से इस तरह के उपकरण के रूप में उपकरणों को दूर करने में यह पहचान करने के लिए ...

इसका उपयोग संकेत के रूप में किया जाता है, और कुछ भी नहीं।

संपादित

यहाँ कोड एक साझा कतार उपयोग करने के लिए चाहते हैं।

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

इसलिए वे अलग-अलग कतार हैं। अब मैं एक ही कक्षा –

+0

की वस्तुओं के बीच उपयोग की जाने वाली एक कतार कैसे बना सकता हूं, मैंने कोड को शामिल करने के लिए उत्तर संपादित किया। –

+0

क्या इस फ़ंक्शन के पैरामीटर के रूप में कतार नाम स्ट्रिंग को पास करना ठीक है? @GuyKogus –

7

dispatch_queue_create यह एक प्रेषण कतार बनाता है वास्तव में क्या नाम से पता चलता है,। आपके द्वारा दिया गया लेबल अद्वितीय होने की आवश्यकता नहीं है, इसका उपयोग केवल डीबगिंग उद्देश्यों के लिए किया जाता है।

संबंधित मुद्दे