由于iOS7以后 dispatch_get_current_queue 被废弃
- 在主线程分离出一个子线程:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[NSThread detachNewThreadSelector:@selector(onPlay) toTarget:self withObject:nil];
}
- 接下来我们来看一下这种方式开启线程创建出来的队列是什么
- (void)onPlay
{
dispatch_queue_t dispatch_queue = dispatch_get_current_queue();
NSLog(@"%s", dispatch_queue_get_label(dispatch_queue));
}
其结果是:com.apple.root.default-overcommit-priority。
由此可见:
主线程
只有一个,并且存在一个与该线程绑定的 dispatch_queue,名字是 com.apple.main-thread,可以通过 dispatch_get_main_queue 得到。
dispatch_queue 线程
dispatch_queue 自己创建的线程,该线程与创建它的 dispatch_queue 绑定。
其他线程
通过NSThread,[NSObject performSelectorInBackground]等接口创建出来的线程,没有与之绑定的 dispatch_queue。
也就是说,如果执行 dispatch_get_current_queue 的线程没有与之绑定的队列的时候,会返回一个 com.apple.root.default-overcommit-priority 的队列,这个队列跟该线程没有关系。
因此我们可以猜测 dispatch_get_current_queue 被废弃的原因就是这个函数不一定总是有意义的。