2013-10-17 4 views
16

わからない、同じ名前を共有して同じキューをシリアルキューを作成し、は、2つのオブジェクト、私はデッドロックを取得しています疑いがあるため、行動上の

は、私は複数のオブジェクトを持つクラスを持っていますか - 各オブジェクトが持つキューを作成します同じ名前。 GCDがオブジェクト間で同じキューを再利用しているのか、同じ名前を共有しているのかはわかりません。 Appleのドキュメント状態として

例えば

@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

、ラベルは次のとおりです。

ユニークな楽器としてデバッグツールでそれを識別するためにキューにアタッチする文字列ラベル...

これはヒントとして使用されます。

EDIT

はここで共有キューを使用するため、必要なコードです。

+0

これらは別々のキューです。今、どのように私は同じクラスのオブジェクトの間で使用される1つのキューを作成することができます –

+0

私はコードを含める答えを編集しました。 –

+0

キュー名文字列をこの関数のパラメータとして渡しても構いませんか? @GuyKogus –

7

dispatch_queue_create正確に名前が示すとおり、ディスパッチキューを作成します。指定したラベルは一意である必要はなく、デバッグ目的でのみ使用されます。

関連する問題