不确定行为,因为我怀疑自己陷入僵局,
我有一个包含多个对象的类-每个对象创建一个具有相同名称的队列。我不确定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
如Apple的文档所述,标签为:
附加到队列的字符串标签,以在调试工具(如Instruments ...)中对其进行唯一标识
它仅用作提示,仅此而已。
编辑
这是您想要使用共享队列的代码。
+ (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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句