- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%d", [self isMainQueue]); // 1
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSLog(@"%d", [self isMainQueue]); // 0
});
}
- (BOOL)isMainQueue {
return strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0;
}
主队列的label是com.apple.main-thread。当然也可以用这种方式来判断其它队列。全局队列的label与其QOS类型相关,label值主要有以下几个:
com.apple.root.user-interactive-qos //
com.apple.root.user-initiated-qos // DISPATCH_QUEUE_PRIORITY_HIGH
com.apple.root.default-qos // DISPATCH_QUEUE_PRIORITY_DEFAULT
com.apple.root.utility-qos // DISPATCH_QUEUE_PRIORITY_LOW
com.apple.root.background-qos // DISPATCH_QUEUE_PRIORITY_BACKGROUND
我们可以使用dispatch_get_global_queue(qos_class_self(), 0)来获取代码所在的的全局队列,进而获取其label值。