iOS开发学习iOS Developer程序员

iOS 主队列使用

2017-05-30  本文已影响78人  BEYOND黄

主队列是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];

上一篇下一篇

猜你喜欢

热点阅读