iOS 主队列使用
主队列是GCD自带的一种特殊串行队列。放到主队列的任务都会放到放到主线程执行。
主队列特点:如果主队列发现当前主线程有任务在执行,那么主队列会暂停调用队列的任务,直到主线程空闲为止。
//异步函数+主队列:所有任务都在主线程中执行,不会开线程
-(void)asyncMain
{
//1.获得主队列
dispatch_queue_tqueue =dispatch_get_main_queue();
//2.异步函数
dispatch_async(queue, ^{
NSLog(@"download1----%@",[NSThreadcurrentThread]);
});
dispatch_async(queue, ^{
NSLog(@"download2----%@",[NSThreadcurrentThread]);
});
dispatch_async(queue, ^{
NSLog(@"download3----%@",[NSThreadcurrentThread]);
});
}
//同步函数+主队列:死锁
//注意:如果该方法在子线程中执行,那么所有的任务在主线程中执行,
-(void)syncMain
{
//1.获得主队列
dispatch_queue_tqueue =dispatch_get_main_queue();
NSLog(@"start----");
//2.同步函数
//同步函数:立刻马上执行,如果我没有执行完毕,那么后面的也别想执行
//异步函数:如果我没有执行完毕,那么后面的也可以执行
dispatch_sync(queue, ^{
NSLog(@"download1----%@",[NSThreadcurrentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"download2----%@",[NSThreadcurrentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"download3----%@",[NSThreadcurrentThread]);
});
NSLog(@"end---");
}
解决办法:
[NSThread detachNewThreadSelector:@selector(syncMain) toTarget:self withObject:nil];