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];


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容